哈希表:数组+链表+红黑树;
哈希值: 十进制的地址值
哈希表:
JDK1.8之前:数组+链表
JDK1.8以后:
数组+链表:同一个哈希值下的元素少于等于8个
数组+红黑树:同一个哈希值下的元素多余8个
新增过程:
a.计算新增元素的哈希值
b.(假设数组已经创建出来),通过 hash%数组长度
c.如果该位置为null:则直接新增
如果该位置不为null:
c1.判断该元素是否重复:
c11.如果不重复,则新增到该索引值位置链表的最后面
c12.如果重复:则不新增
扩容规则:
什么情况下链表会转红黑树:
a.当同一索引值下元素个数>8,并且数组长度>=64
什么情况下会扩容:
a.当同一索引值下元素个数>8,并且数组长度<64
b.数组的索引值,占有>到0.75,会扩容
注意:
同一索引值下元素不能超过8个,如果超过
1.扩容,把元素分开,让其小于8个
2.把链表结构转换成红黑树
新容量 = 旧容量<<1;
可以通过构造方法指定加载因子。
可以通过构造方法指定哈希表数组的长度:
实际的长度>=传入容量,则最近2的次方的值。