【问题标题】:How can I have a HashMap with unique keys in java?如何在 java 中拥有具有唯一键的 HashMap?
【发布时间】:2012-01-19 08:51:56
【问题描述】:

如何在 Java 中拥有具有唯一键的 HashMap? 或者,在 HashMap 中拥有唯一键或者默认情况下键是唯一的,这是否有意义? 我是新手。 谢谢

【问题讨论】:

  • 默认是唯一的。请注意Map 上的.keySet() 返回Set,并且Set 的元素默认情况下是唯一的。如果您尝试将值推送到现有键,旧值将被覆盖。
  • 请注意,Java 中的“唯一”意味着在方法 equals 和 hashcode 的实现方面相等!

标签: java hashmap


【解决方案1】:

哈希映射键是唯一的。添加重复键,然后它将被覆盖。

 HashMap hm = new HashMap();
 hm.put("1", new Integer(1));
 hm.put("2", new Integer(2));
 hm.put("3", new Integer(3));
 hm.put("4", new Integer(4));
 hm.put("1", new Integer(5));// value integer 1 is overwritten by 5

默认情况下,Hashmap 是不同步的。

【讨论】:

  • 那么我们如何使键值关系不唯一,即我也想要上面键 1 的值 5?有什么方法可以达到这个目的
  • @VamsiPavanMahesh,您必须为对应的key 存储某种ListMapMap<String, List<Integer> m = new HashMap<>();
【解决方案2】:

键在所有地图中都是唯一的。各种映射实现之间的差异涉及空键的可能性、迭代顺序和并发问题。

【讨论】:

    【解决方案3】:

    尝试查看Java API for Map,这是HashMap 实现的接口。第一句话是:

    将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射到一个值。

    【讨论】:

      【解决方案4】:

      HasMap 有唯一的键。因为 .keySet() 返回具有唯一成员的 Set

      【讨论】:

        【解决方案5】:

        HashMap 是一个存储(键,值)对的集合,根据HashMap 的文档,键始终是唯一的。

        如果您在 hashmap 中添加一个已经存在(冲突)的键,旧值将被替换。

        【讨论】:

          【解决方案6】:

          一般的hashmap通常被实现为一个关联数组,所以假设你的数组有N个元素,从0到N-1,当你想添加一个新的(键,值)对时,它在幕后做了什么是(只是概念上):

          1. index = hash(key) mod N
          2. 数组[索引] = 值

          因此,通过构造,一个键被映射到一个且唯一的数组条目。

          请注意,它实际上比这更复杂一些:我故意忽略碰撞处理、重新散列等内容,您可能在这里有一个很好的总体思路https://en.wikipedia.org/wiki/Hash_table

          【讨论】:

            猜你喜欢
            • 2016-08-17
            • 2016-03-17
            • 1970-01-01
            • 2021-09-10
            • 2014-07-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-14
            相关资源
            最近更新 更多