Я создаю смежный список, используя хеш-таблицу.Все работает хорошо, но сейчас я пытаюсь сократить использование памяти.
Это мои типы данных.Word - мой собственный класс, экономящий больше памяти, чем строка:
static private Hashtable<Word, ArrayList<Word>> wordlist;
static private Hashtable<Word, Word> wordlist2;
Я читаю файл слов и добавляю слово в свой список слов, а также во второй список слов:
static public void Read
.....
wordlist.put(word, new ArrayList<Word>());
wordlist2.put(word,word);
Наконец, я добавляю ребра в свой список слов:
static public void generateEdges(){
...
wordlist.get(word).add(wordlist2.get(newword));{
В идеале я бы просто сказал wordlist.get (word) .add (newword);так что мне не пришлось бы использовать wordlist2 вообще.Но я предполагаю, что причина этого не в том, что в списке слов есть ArrayList.Может кто-нибудь придумать какие-нибудь альтернативные способы, чтобы мне не пришлось использовать wordlist2?
Спасибо!
Редактировать: Полный generateEdges ():
static public void generateEdges(){
for(Word word : list.keySet()){
Word newword = new Word(Arrays.copyOf(word.charAt, wordLength));
char origChar = word.charAt[0];
int origPos = 0;
for(int i = 0; i < wordLength; i++){
newword.charAt[origPos] = origChar;
origChar = word.charAt[i];
origPos = i;
for (int c = 0; c < alphabet.length; c++){
if (alphabet[c] != word.charAt[i]) {
newword.charAt[i] = alphabet[c];
if (Contains(newword) != null)
wordlist.get(word).add(wordlist2.get(newword));
}}}}}
Метод получениякрай слова:
static public ArrayList<Word> getEdges(Word word){
return wordlist.get(word);
}