hashSet结构,hashCode方法和hash bucket之间的交互是什么?

时间:2015-05-18 09:00:04

标签: java hash collections hashcode hashset

请解释以下声明:

  

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

提及哈希桶和检索意味着HashSet与哈希映射有一定的关系,因为HashSet interface只暴露addremove和{{1}方法,没有contains方法。

Hash Set是否在内部使用哈希码和哈希桶?或者它是否以某种方式使用哈希地图?

2 个答案:

答案 0 :(得分:1)

SCJP Certification中有关hashcode方法的问题:

  

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

     

一个。可以使用给定类的hashCode方法进行测试   该类的对象平等和对象不等。

     

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

     

℃。可以使用给定类的hashCode方法进行测试   该类的对象不等式,但不是对象相等。

     

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

     

电子。 hashCode方法由java.util.HashSet集合使用   用于将该集合中的元素分组为散列桶的类   快速检索。

     

答案:C,E

说明:(此解释取自here

  

如果根据equals(Object)方法两个对象相等,那么   在两个对象中的每一个上调用hashCode()方法必须生成   相同的整数结果。如果有两个对象,则 NOT 是必需的   根据{{​​1}}方法不相等,然后调用   两个对象中的每一个上的equals(java.lang.Object)方法必须产生不同的   整数结果。但是,程序员应该意识到这一点   为不相等的对象产生不同的整数结果可以改善   哈希表的表现。

答案 1 :(得分:0)

您添加到HashSet的值实际上设置为底层 keys的{​​{1}}。 HashMap在引擎盖下使用HashSet。因此,HashMap也应该有HashMap的行为。