Java 当hashset有多个具有重复值的对象时,hashset如何使用hashtable?

Java 当hashset有多个具有重复值的对象时,hashset如何使用hashtable?,java,Java,我非常怀疑以下几点: 比如说我创造了 hashset<employee> set = new hashSet(); employee e1 = new employee("adithyan",1); employee e2 = new employee("santhosh",1); employee e3 = new employee("pavan",2); set.add(e1); --假设e1和e2哈希代码相同,值存储在同一个bucket中,如果我在id=1上搜索,它将如何搜

我非常怀疑以下几点:

比如说我创造了

hashset<employee> set = new hashSet();
employee e1 = new employee("adithyan",1);
employee e2 = new employee("santhosh",1);
employee e3 = new employee("pavan",2);

set.add(e1);
--假设e1和e2哈希代码相同,值存储在同一个bucket中,如果我在id=1上搜索,它将如何搜索,因为e1和e2哈希代码相同,可能e1和e2将存储在同一个bucket中,结果会是什么

我对bucketing感到困惑,它有多个对象,并且对象具有相同的数据(比如bucket1->object1.city=bglr,object2.city.=bglr)-在这种情况下,哈希代码将是相同的,因为两个对象都在同一个bucket中,我不知道如何进行搜索


有人能解释一下hashset是如何使用HashTable和相同的hashcode和bucketing概念的吗?

HashMap
hashset
通过使用
hashcode
方法来确定在哪个bucket中存储值。当您添加新值时,它将找到正确的bucket,并使用
equals
检查该bucket中的所有值,以确保您添加的内容不重复

当获取一个值时,它将再次检查相应的bucket(基于
hashCode
),然后执行
equals
调用,以确保它确实是您要查找的值


如果您为
Employee
重新定义了
equals
hashCode
方法,以便仅通过
id
进行匹配,则
e2
将被视为重复,并将替换以前的值,即使这可能不是您想要的。换句话说,HashMap的行为是由您如何实现hashCode和equals定义的。

首先,HashSet使用HashMap而不是HashTable。其次,hashCode和equals都用于搜索集合中映射/元素中的键。HashSet的可能重复项使用背景中的hashtable I red from,如果我错了,请更正我
set.add(e2);