HashMap put方法

时间:2015-01-30 12:17:23

标签: java hashmap

我在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);
        }
    }
}

5 个答案:

答案 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。但是,你必须自己跟踪重复和碰撞