【问题标题】:Collision is Hashmap collection in Java [duplicate]碰撞是Java中的Hashmap集合[重复]
【发布时间】:2014-07-25 17:07:00
【问题描述】:

我想知道一旦 Key 相同,Hashmap 会处理该值。我使用 put 方法插入 2 个具有相同键的元素。 如果不存在值,则返回 null ,否则返回支持的私有值。 hashMap 是否不会为同一个 Key 存储多个值

public class geekarray {
    HashMap<Integer, String> a ;
    geekarray(){
        a= new HashMap<Integer,String>(10);

        System.out.println(a.put(1, "yogi"));
        System.out.println(a.put(1, "yogi2"));
        System.out.println(a.put(2, "yogi3"));
    }
    public static void main(String s[]){
        geekarray a = new geekarray();

    }
}

输出:-

null
yogi
null

【问题讨论】:

    标签: java hashmap


    【解决方案1】:

    没有。 HashMap 每个键只存储一个值(这是唯一的),旧值被新值覆盖。如果您有兴趣为每个键存储多个值,可以查看 Apache Common Utils MultiMap

    【讨论】:

      【解决方案2】:

      它不会为同一个键存储多个值。新值替换旧值。

      将指定值与此映射中的指定键相关联。如果映射先前包含键的映射,则替换旧值

      (Source)

      至于返回值:

      与 key 关联的先前值,如果没有 key 映射,则为 null。 (返回 null 也可以表明映射之前将 null 与 key 关联。)

      【讨论】:

        【解决方案3】:

        不,HashMap 不会为同一个键存储多个值。正如documentation 所说,

        If the map previously contained a mapping for the key, the old value is replaced. 
        

        【讨论】:

          【解决方案4】:

          根据 Java 7 文档:

          如果映射先前包含键的映射,则旧值 被替换了。

          所以每个键只能放置一个值。任何额外的 put 都将覆盖现有值。

          http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#put(K,%20V)

          【讨论】:

            猜你喜欢
            • 2011-03-28
            • 2021-12-31
            • 1970-01-01
            • 1970-01-01
            • 2021-04-18
            • 2022-09-07
            • 1970-01-01
            • 1970-01-01
            • 2013-10-28
            相关资源
            最近更新 更多