【问题标题】:java hash map behavior for different key but same hash code不同键但相同哈希码的java哈希映射行为
【发布时间】:2015-09-08 06:09:04
【问题描述】:

与 HashMap 一样,内部有存储桶来保存键值对。

对于具有相同哈希码的键。

例如“abcdef”和“abcdfG”的哈希码是相同的。

map.put("abcdef", 1);
map.put("abcdfG", 2);

当它们被放入哈希映射时,Entry 对象被创建,它们都被放置在同一个存储桶中,并且一个 Entry 的下一个指向另一个。

问题是如何表现?当我们做 map.get("abcdef");它会给 1 还是 2

【问题讨论】:

  • 首先使用hashCode解析bucket,然后遍历二叉树得到精确的key,找到精确的key后获取值
  • 您为什么不尝试一下或阅读 javadoc?这不仅是 1 种,而且是 2 种显而易见且简单的方法,可以让您自己获得答案。

标签: java hash hashmap


【解决方案1】:

map.get("abcdef") 将返回正确的值 (1),因为它将使用 equals 方法将桶中的每个键(匹配键的 hashCode)与给定键进行比较,直到找到完全匹配.

【讨论】:

    【解决方案2】:

    内部存储桶仅由 java 使用,以帮助减少需要搜索的项目数量。您可以将所有内容推送到同一个存储桶中(使用不同的密钥)。结果只是你的程序会变慢。

    【讨论】:

      【解决方案3】:

      它会首先使用hashcode()来解析bucket,然后遍历平衡树得到精确的key,一旦找到精确的key就会得到值

      根据您使用的运行时版本,它可能是 LinkedList 或平衡树

      http://openjdk.java.net/jeps/180

      【讨论】:

      猜你喜欢
      • 2018-11-13
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 2015-02-25
      相关资源
      最近更新 更多