java中HashSet子类依靠什么区分重复元素?

admin 2020-04-21 11:30:04 java常见问答 5503

问题:HashSet子类依靠()方法区分重复元素。

1、toString(),equals()
2、clone(),equals()
3、hashCode(),equals()
4、getClass(),clone()

正确答案:

3 hashCode(),equals()

解析:

HashSet类,是存在于java.util包中的类。同时也被称为集合,该容器中只能存储不重复的对象。

HashSet的底层还是用HashMap来实现的。将Entry的V都变成了同一个Object对象,public static final PRESENT = new Object()。

而HashMap的数据结构是数组+链表+红黑树。

调用K的hashCode方法,然后高低16位进行&运算。得到的hash值,与数组tab[](桶)的长度-1进行&运算,确定插入对象在哪一个桶上。然后调用对象的equals方法,形成链表。当链表长度大于8时,链表转红黑树。