2010-03-08 3 views
2

Quelle infrastructure de données utiliseriez-vous à la place de X pour avoir des fusions, des tris et des ajouts efficaces comme décrit ci-dessous?Pour avoir un entier pointant vers 3 listes ordonnées en Java

# 1 Solution possible: un HashMap à X -datastructure

Avoir un HashMap pointant de fileID une certaine structure de données reliant word, wordCount et wordID peut être une bonne solution. Cependant, je n'ai pas trouvé un moyen de l'implémenter. Je ne suis pas autorisé à utiliser PostgreSQL ou un outil similaire pour garder mes données neutralisées. Je ne suis pas autorisé à utiliser PostgreSQL ou tout autre outil similaire pour garder mes données neutralisées. Je veux avoir des fusions, des tris et des ajouts efficaces selon fileID, wordID ou wordCount pour le type ci-dessous.


J'ai le type Words qui a le champ fileID qui pointe vers une liste de mots et des éléments d'information relatifs:

Le type

class Words 
=================================== 
fileID: int 
[list of words] : ArrayList 
[list of wordCounts] : ArrayList 
[list of wordIDs] : ArrayList 

Exemple de les données en

fileID word wordCount wordID 
     instance1 of words 
1  He  123   1111 
1  llo 321   2 
     instance2 of words 
2  Van 213   666 
2  cou 777   932 

Exemple de fusion nécessaire

fileID  wordID     fileID  wordID 
1   2 
1   3   wordID=2 
2   2   ========> 1   2 
2   3      2   2 

Je ne vois pas l'utilisation des réglages des opérations telles que intersections ici parce que l'ordre est nécessaire.

Avoir trois HashMaps fait le tri difficile:

  1. word-wordID dans une donnée fileID
  2. wordID-fileID
  3. wordID-wordCount dans une donnée fileID

Répondre

3

Pourquoi n'utilisez-vous pas ac lass pour stocker le mot, le compte de mots et le mot id ensemble? Ensuite, vous auriez besoin d'une seule liste pour chaque ID de fichier. Cela permettrait au moins à l'OMI de simplifier les opérations.

class Word { 
    private String text; 
    private long count; 
    private long id; 
    // getters, setters 
} 

class Words { 
    private int fileID; 
    private List<Word> words; 
    // getters, setters 
} 

Ce serait le squelette, qui a déjà résout automatiquement la cartographie 3. Ensuite, vous pouvez ajouter les applications supplémentaires nécessaires pour Words et/ou Word.

Je ne comprends pas de votre description, si le même mot a toujours le même motID, ou peut-il avoir des ID différents dans des fichiers différents; sans cela, je ne peux pas aller de l'avant avec l'idée de conception. Mais j'espère que cela vous aidera à surmonter l'impasse :-)

+0

Cela semble être une excellente réponse.Cependant, je dois d'abord faire quelques expériences pour les fusions, ajouts et autres pour vérifier que c'est efficace. –

+0

Oui, le même mot doit toujours avoir le même motID. Il ne peut pas avoir d'ID différent. –

Questions connexes