HashMap会覆盖nextvalue Java

use*_*467 2 java hashmap

让我说我有hashmap存储,它包含例如 - (11,name1)(11,name2),我调用HashMap.get(11),它只显示name2,这意味着它覆盖了11的第一个输入.我怎么能存储name1和name2都是ID 11使用hashmap?我知道我可以同时使用HashMap和HashSet,但我不想为HashMap创建每个HashSet.我只想使用hashSet.我该怎么做?我希望你能帮助我.谢谢.

public void insert(int ID, String key){
        int hashKey = Hash(key);
        System.out.println("Hash Key" + hashKey);
        int node = Find(ID,hashKey);

        storeR.put(node, key);
    }
Run Code Online (Sandbox Code Playgroud)

Bob*_*der 6

您可以使用:

HashMap<Integer, List<String>>
Run Code Online (Sandbox Code Playgroud)

HashMap你必须为每个键放一个值.所以当然,如果你把相同的键放两次,那么该值将被覆盖.

解决方案是为每个键保存一组值.

在您的代码而不是:

storeR.put(node, key);
Run Code Online (Sandbox Code Playgroud)

你应该写:

List<String> nodeValues = storeR.get(node);
if (nodeValues == null) {
    nodeValues = new ArrayList<String>();
    storeR.put(node, nodeValues  );
}
nodeValues.add(key);
Run Code Online (Sandbox Code Playgroud)

你还应该改变storeR类型HashMap<Integer, List<String>>

MultiMap 也是一个类似的解决方案.