Как вы можете сделать эффективную many-to-many
-отношения от fileID
к Words
и от word
к fileIDs
без -Инструменты базы данных, как Postgres в Java?Чтобы эффективно многие-ко-многим в Java
У меня есть следующие классы. Отношение от fileID
до words
дешево, но не наоборот, так как мне нужно три for
-loops для этого.
alt text http://img191.imageshack.us/img191/4077/oliorakenne1.png
Мое решение, очевидно, не эффективным. Другие варианты могут заключаться в создании дополнительного класса, который имеет word
в качестве идентификатора с ArrayList
от fileID
.
Ответить на ответ JacobM в
Соответствующая часть конструкторами Myfile является:
/**
* Synopsis of data in wordToWordConutInFile.txt:
* fileID|wordID|wordCount
*
* Synopsis of the data in the file wordToWordID.txt:
* word|wordID
**/
/**
* Getting words by getting first wordIDs from wordToWordCountInFile.txt and then words in wordToWordID.txt.
*/
InputStream in2 = new FileInputStream("/home/dev/wordToWordCountInFile.txt");
BufferedReader fi2 = new BufferedReader(new InputStreamReader(in2));
ArrayList<Integer> wordIDs = new ArrayList<Integer>();
String line = null;
while ((line = fi2.readLine()) != null) {
if ((new Integer(line.split("|")[0]) == currentFileID)) {
wordIDs.add(new Integer(line.split("|")[6]));
}
}
in2.close();
// Getting now the words by wordIDs.
InputStream in3 = new FileInputStream("/home/dev/wordToWordID.txt");
BufferedReader fi3 = new BufferedReader(new InputStreamReader(in3));
line = null;
while ((line = fi3.readLine()) != null) {
for (Integer wordID : wordIDs) {
if (wordID == (new Integer(line.split("|")[1]))) {
this.words.add(new Word(new String(line.split("|")[0]), fileID));
break;
}
}
}
in3.close();
this.words.addAll(words);
Конструктор Слова на the paste.
Я добавил сборщиков MyFile к моему вопросу. –
ОК, я вижу конструктор, но я до сих пор не вижу, где заполняется список слов. Это то, что меня интересует. –
Спасибо, что указали это! Я добавил соответствующую часть конструктора к моему вопросу. –