对HashSet存储原理的理解
HashSet原理
hashSet的底层是直接调用hashMap来实现存储,其值作为hashMap的值。
为什么要采用hash算法?
解决的是唯一性
存储数据,底层采用数组
采用数组怎么判断唯一性?
数组可以遍历,但是效率低下
所以,使用hash算法,对存储对象使用hashcode,然后跟数组长度-1做位运算,得到存储下标,没有其他元素,直接存储,不用比较。
随着元素不断增加,会出现“哈希冲突”,hash值是相同的,这个时候需要比较,使用equals方法比较。
equals相等不插入,不相等则形成链表。
哈希表是什么?
本质是一个数组,而数组的元素是链表。
以上是JDK1.7的实现
JDK1.8优化后:随着元素不断增加,链表会越来越长,会优化成红黑树。