LinkedList 作为 Hashtable 的值

LinkedList as value for Hashtable

我已经创建了一个哈希表,其中一个字符串作为键,一个字符串的链表作为我的值。这是我的实现:

 Hashtable <String, LinkedList<String>> table = new Hashtable <String, LinkedList<String>>();

我想做的是对单词文件进行排序,并将每个排序后的单词存储到哈希表(代表键)中,并将原始单词存储为我的 LinkedList 值的一部分。

例如,如果单词是

"cat"
 Sorted = "act"
 Store in Hashtable (key : act, value : cat);

现在我只是对如何从根本上添加到我的 LinkedList 感到困惑。

这就是我的想法:

 LinkedList <String> temp = table.get(sortedWord) //if null, then nothing in list
 if(temp==null) 
     table.put(sortedWord,temp.add(originalWord));

 This is not working since its not following the library functions but I'm unsure of how I would do this.

这是我的解决方案。解决方案是遍历单词,用 Array.sort() 对字符进行排序。检查 Hashtable 是否填充了排序后的单词,然后从那里创建 LinkedList 并将元素添加或添加到已创建的 LinkedList 中。不确定为什么选择 LinkedList 作为数据结构。

Hashtable <String, LinkedList<String>> table = new Hashtable <String, LinkedList<String>>();

for(String s : new String[]{"cat","dog","mouse", "cat"})
{
     char[] chars = s.toCharArray();
     Arrays.sort(chars);
     String sorted = new String(chars);

     if(table.containsKey(sorted))
     {
         LinkedList<String> list = table.get(sorted);
         list.add(s);
     }
     else
     {
         LinkedList<String> list = new LinkedList<String>();
         list.add(s);
         table.put(sorted, list);
     }
}

这将产生以下哈希表。

{act=[cat, cat], emosu=[mouse], dgo=[dog]}

将此问题用于对字符进行排序。

Sort a single String in Java

你可以这样做:

if(!table.containsKey(sorted)) {
     table.put(new LinkedList<String>())
}
table.get(sorted).add(...)

这段代码的问题:

 LinkedList <String> temp = table.get(sortedWord) //if null, then nothing in list
 if(temp==null) 
     table.put(sortedWord,temp.add(originalWord));

是,如果tempnull,那意味着你没有一个LinkedList,但是你的语句试图将originalWord添加到一个LinkedList 不存在。如果tempnull,那么temp.add一定会得到NullPointerException.

使用 temp.add 如果您 有一个 LinkedList(并且您不需要另一个 table.put当这种情况发生时)。如果没有,则必须使用一个元素创建一个新的 LinkedList。这是一种方法:

if (temp == null) {
    LinkedList<String> newList = new LinkedList<>(Arrays.asList(originalword));
    table.put(sortedWord, newList);
} else {
    // you have a LinkedList, add the word to it

(Arrays.asList 似乎是创建仅包含一个元素的列表的最简单方法。但它不会是 LinkedList,因此您需要额外的构造函数调用来创建LinkedList.)