首页 > 解决方案 > 将边添加到字符串和 ArrayList 的哈希表

问题描述

我正在使用哈希表制作邻接列表。一切正常,但我现在要做的是减少内存的使用。

这些是我的数据类型。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。但我猜这不起作用的原因是因为 wordlist 有一个 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);
}

标签: javamemoryarraylisthashtablegraph-theory

解决方案


推荐阅读