我在Java中使用.put(Integer, String)
时遇到了一些麻烦。
据我所知,当发生碰撞时,HashMap
会询问to
值是否与.equals(Object)
相同,如果不是,则这两个值存储在LinkedList
中。然而,size()
是1,散列迭代器只显示一个结果,最后一个结果。
除此之外,java HashMap
API声明:put
public V put(K key, V value)
将指定的值与此映射中的指定键相关联。如果 地图以前包含键的映射,旧值是 替换。
这不是我在任何地方读过的东西。
思想?
public class HashProblema {
public static void main(String[] args) {
HashMap<Integer, String> hash= new HashMap();
hash.put(1, "sdaaaar");
hash.put(1, "bjbh");
System.out.println(hash.size());
for (Object value : hash.values()) {
System.out.println(value);
}
}
}
答案 0 :(得分:2)
输出为 - :
1
bjbh
由于存在密钥映射,因此将替换密钥,并且大小仅为1。
答案 1 :(得分:0)
新密钥重写了这个值。大小保持为1,值变了。这就是它的工作原理,因为键值总是唯一的。你不能在1个键上映射多个值。
答案 2 :(得分:0)
API是最终的参考,这是您必须相信的。
当HashMap中已存在键的哈希值时发生冲突。然后比较键的值,如果它们不同,则将条目放在链表中。如果键是相同的,则覆盖HashMap中的旧键值。
答案 3 :(得分:0)
API文档通常应被视为权威文档,除非有充分的理由怀疑其准确性。
您几乎肯定会忽略任何不会将自己标记为“明知”与文档不一致并提供可测试证据的声明。
我谦卑地建议你可能会对链接'碰撞'列表的作用感到困惑。在Java中,HashMap
使用链接列表来存储多个值,其中密钥的哈希码与一个或多个其他密钥放在同一个“桶”中。
答案 4 :(得分:-1)
Java中的HashMap将始终存储键值对。没有链接列表。您所描述的是哈希映射的一般概念(通常在计算机科学课中讲授),但Java中的实现是不同的。在这里,每个键只有一个值(你放在那个地方的最后一个)。
但是,您可以自由定义包含List对象的HashMap。但是,你必须自己跟踪重复和碰撞