【问题标题】:What is the interaction between hashSet structure, hashCode method and hash buckets?hashSet 结构、hashCode 方法和哈希桶之间的交互是什么?
【发布时间】:2015-05-18 09:00:04
【问题描述】:

请解释以下陈述:

java.util.HashSet 集合类使用hashCode 方法将该集合中的元素分组到哈希桶中以便快速检索。

提到哈希桶和检索意味着HashSet 与哈希映射有某种关系,因为HashSet interface 仅公开addremovecontains 方法,没有T retrieve(int hashCode) 方法。

Hash Set 内部使用哈希码和哈希桶是真的吗?还是以某种方式使用 Hash Map?

【问题讨论】:

  • 您所说的“或者使用哈希映射”是什么意思?您的问题目前还不清楚...

标签: java hash collections hashcode hashset


【解决方案1】:

SCJP Certification 中也有关于hashcode 方法的类似问题:

问:20 关于 hashCode 方法,哪两个说法是正确的? (选择两项。)

A.给定类的hashCode 方法可用于测试 该类的对象相等和对象不相等。

B. hashCode 方法由 java.util.SortedSet 使用 集合类来对该集合中的元素进行排序。

C.给定类的hashCode 方法可用于测试 该类的对象不相等,但不是对象相等。

D. a 返回的值的唯一重要特征是 hashCode 方法是值的分布必须遵循 高斯分布。

E. java.util.HashSet 集合使用 hashCode 方法 类将该集合中的元素分组到哈希桶中 快速检索。

答案:C、E

解释:(此解释摘自here

如果两个对象根据equals(Object)方法相等,那么 对两个对象中的每一个调用hashCode() 方法必须产生 相同的整数结果。 要求如果两个对象是 根据equals(java.lang.Object)方法不相等,然后调用 两个对象上的hashCode() 方法必须产生不同的 整数结果。但是,程序员应该意识到 为不相等的对象产生不同的整数结果可能会改善 哈希表的性能。

【讨论】:

    【解决方案2】:

    您添加到HashSet 的值实际上设置为基础 HashMapkeysHashSet 在引擎盖下使用 HashMap。所以,HashMap 的行为也应该适用于 HashSet

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 2011-07-07
      相关资源
      最近更新 更多