【问题标题】:HashMap's method hashCode and it's effectsHashMap的方法hashCode及其效果
【发布时间】:2015-01-14 10:22:04
【问题描述】:

我正在研究散列,更具体地说是 hashMap。我不了解 hashCode() 方法,并且真的希望有人为我清除它。我为了一点测试,写了这段代码:

    Map<Integer, Integer> map = new HashMap<Integer, Integer>();

    map.put(4,4);
    map.put(5,4);

    System.out.println(map.hashCode());

这里的输出是 1。但是当我稍微改变一下时:

    map.put(2,5);
    map.put(7,4);

输出为 10。

这是如何计算的,或者如果不运行它会打印出什么我应该怎么知道?

提前致谢!

【问题讨论】:

  • 为什么对HashMap的hashcode感兴趣?您想将地图本身用作另一个地图中的键(这可能是个坏主意)?
  • 仅供学习使用:)
  • 看看 HashMap 如何调用其项目的哈希码方法将它们放入正确的存储桶中可能会更有趣。 HashMap 的哈希码本质上是其项的哈希码的组合,但不是 HashMap 本身的哈希策略的一部分,如果你关注我的话。
  • 非常感谢。我想我可以跟着你

标签: java hashmap hashcode


【解决方案1】:

HashMap 的hashCode 是映射中条目的函数,但是像你这样调用map.hashCode() 并没有多大意义。

HashMap 类对hashCode 方法的主要用途是确定应该在HashMap 的哪个桶中存储和搜索密钥。这是通过调用hashCode 来完成您在HashMap 中放置/搜索的键。

顺便说一句,这是您在 Map 中输入的 hashCode 的计算结果:

  • HashMap 的hashCode 是条目的hashCodes 的总和。
  • EntryhashCode 是键的hashCode 异或值的hashCode
  • Integer 的hashCode 是 int 值。

第一次测试:

4^4 + 5^4 = 0 + 1 = 1;

第二次测试:

2^5 + 7^4 = 7 + 3 = 10;

【讨论】:

  • 所以它以独特的方式存储,让您更容易搜索?它只是签署随机值但唯一的值还是它是如何做到的?
  • @user3161041 hashCode 不能返回随机值,因为对状态不变的对象调用两次hashCode 必须返回相同的值。它也不必返回唯一值。您应该阅读 Object 类中 hashCode 的 Javadoc。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多