Добавление ребер в хеш-таблицу строк и ArrayList - PullRequest
0 голосов
/ 23 октября 2018

Я создаю смежный список, используя хеш-таблицу.Все работает хорошо, но сейчас я пытаюсь сократить использование памяти.

Это мои типы данных.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);
}
...