对不起,如果这个问题已经被问到了,但是我不好解答我的问题。 我正在HashMap中我把两个值(7,“值试验1”)(7,“值试验2) 根据规范的Java API HashMap put第一值被第二替换。java hashMap <Integer,String>碰撞
我问题是,当谈到冲突?为什么我的第二个值未在LinkedList的或存储在另一个地方存储在HashMap中的分辨率是多少?这是由于相等于或hascode方法??
问候
对不起,如果这个问题已经被问到了,但是我不好解答我的问题。 我正在HashMap中我把两个值(7,“值试验1”)(7,“值试验2) 根据规范的Java API HashMap put第一值被第二替换。java hashMap <Integer,String>碰撞
我问题是,当谈到冲突?为什么我的第二个值未在LinkedList的或存储在另一个地方存储在HashMap中的分辨率是多少?这是由于相等于或hascode方法??
问候
这与散列冲突无关。哈希碰撞(即,具有相同hashcode()
的密钥)由HashMap正确处理。在你的例子中,两个键都是相等的(即,7.equals(7) == true
),所以旧值被替换。
在下面的例子
Map<Integer, String> map = new HashMap<>();
map.put(7, "value 1");
map.put(7, "value 2");
System.out.println(map.get(7));
你会在最后一行料到会发生的?
也许您在寻找multimap?
这是我期待的结构!也许一个愚蠢的问题大声笑..我期望在这个索引上获取方法的调用返回一个对象LinkedList或类似的东西......为什么Java开发人员选择了这种实现? – asko
因为这是一个Map的功能。它将一个整数映射到一个字符串(在这种情况下)。参看http://en.wikipedia.org/wiki/Map_%28mathematics%29和http://en.wikipedia.org/wiki/Map_%28computer_science%29。但是,为什么JDK不提供MultiMap也是一个很好的问题。 – Cephalopod
如果你想存储多个值同一个键,就可以从Apache的集合使用多重映射。 https://commons.apache.org/proper/commons-collections/javadocs/api-3.2.1/org/apache/commons/collections/MultiMap.html – gaganbm
以防万一你不知道,'Map#put'返回在这种情况下,你可以随心所欲地做任何事情。 – A4L