Set集合:
HashSet:无序,不可重复
1.底层实际上是一个HashMap,HashMap底层采用了哈希表的数据结构。
2.哈希表又叫散列表,哈希表底层是一个数组,这个数组中的每一个元素又是一个单向链表,每个单向链表都有一个独一无二的hash值,代表数组的下标,在某个单向链表中的每个节点上的hash值是相等的,hash值实际上是key调用hashCode方法,在通过“hash function”转换成的值。
哈希表的简单结构图如下:
3.如何向哈希表中添加元素?
答:根据key的hashCode方法,经过某个算法得出hash值,如果这个哈希表中不存在这个hash值,则直接加入元素中。如果该hash值已经存在,继续调用key之间的equals方法,如果equals方法返回false,则将该元素添加到该单向链表中,如果equals方法返回的是true,则放弃添加该元素。
4.hashSet其实是hashMap中的key部分,hashSet有什么特点,hashMap中的key应该具有相同的特点。
5.hashSet和hashMap初始化容量都是16,默认加载因子是0.75。
6.存储在hashSet集合或者hashMap集合key部分的元素需要同时重写hashCode和equals方法。(在hashSet中添加元素是,先调用hashCode方法,看hash值是否一致,若一致调用equals方法看对象是否相同,不同则添加)。
7.如何从哈希表中取得元素?
答:根据key算出hash值,找到对应数组中的元素,在用key和该元素中的单向链表中的节点一次遍历,找到value。
8.哈希表的增删和查询效率都是较高的。(根据以上3和7)