在HashMap<String, LinkedList>中添加到LinkedList。

5
我想向哈希表中的链表添加内容。
例如: john:--> jack-->black-->crack susan:--> sally,sammy,silly
我不太确定如何做到这一点。我是否需要为每个名称创建一个新的链表,如果是,我该如何动态创建它们。以下是我尝试编写的一些示例代码。
import java.util.*;
import java.io.*;
public class test {
    public static void main(String args[]) throws FileNotFoundException{
        HashMap<String, LinkedList<String>> testMap =  new HashMap<String, LinkedList<String>>();
        File testFile = new File("testFile.txt");
        Scanner enterFile = new Scanner(testFile);
        String nextline = "";
        LinkedList<String> numberList = new LinkedList<String>();
        int x = 0;
        while(enterFile.hasNextLine()){
            nextline = enterFile.nextLine();
            testMap.put(nextline.substring(0,1),numberList);
            for(int i = 1; i < nextline.length() - 1; i++){
                System.out.println(nextline);
                testMap.put(nextline.substring(0,1),testMap.add(nextline.substring(i,i+1)));
            }
            x++;
        }
        LinkedList<String> printHashList = new LinkedList<String>();
        printHashList = testMap.get(1);
        if(printHashList.peek() != "p"){
            System.out.println(printHashList.peek());
        }
    }
}

抱歉,如果这不是一个好的帖子,这是我的第一个。

1
这是比我看到的许多第一篇帖子都要好得多的帖子,继续保持好工作。 - Neilos
2个回答

2
public void putToMap(String name) {
    String firstLetter = name.substring(0, 1);

    List<String> names = testMap.get(firstLetter);
    if (names == null) {
        names = new LinkedList<String> ();
        testMap.put(firstLetter, names);
    }

    names.add(name);
}

正确的算法,但方法应该是静态的,并且应该将testMap作为参数传递(如果从主方法访问)。 - Chris
2
是的,我只是不在乎... :) - Alex Suo
Guava 是一个非常臃肿的库,仅为了这一个特性就包含它有些浪费。我使用的是这种方法。 - etherous

1

Alex的答案是您问题的常见(也是最轻量级的)解决方案,如果他根据我的评论进行修改,那么这应该是您选择的答案,但只是想让您知道另一种解决方案是使用LinkedListMultiMap(这是Guava库中的一个类)。

LinkedListMultiMap是处理映射列表的简单方法(但会带来Guava库的额外负担)。 您可以为每个键单独添加多个值,我认为这是您所期望的行为。


我记得 Google Multimap 曾经非常流行。不确定现在是否仍在使用,因为我有强烈的倾向选择简单的解决方案,除非编写它的成本不值得... - Alex Suo
我只是提供另一种解决方案作为参考。个人而言,我会选择你的解决方案。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接