HashMap中当链表元素>8时扩容但是当数组主体>64时,会变成红黑树

HashMap默认长度为16,存取无序,键和值的位置可以是null,但键是唯一的

数据结构是计算机存储数据、组织数据的方式

ArrayList集和底层的数据结构是数组,查询快,增删慢

LinkedList集合底层的数据结构是链表,查询慢,增删快

HashMap的put方法用来放入数据 具有修改覆盖功能

在第一次调用put方法时创建数组 Node[]table,运用HashCode算出值,结合数组

长度采用算法存储空间的索引值,例如:给长度取余,如果计算出的索引空间没有数据,则直接存储到数组中

HashMap<String,Tnteger>hm = new HashMap<>();

Hm.put(“key”,值)

算法:(位运算)无符号右移(>>>)、按位异或(^)、按位与(&)计算索引

       平方取中法、取余法(效率最低)、伪随机数法

索引值是通过对数据进行HashCode计算所得的值与数组长度进行取余后所得的值

Hash%length

如果两个数据的索引一样,但是哈希值不一样,则在此空间上划出一个节点,对数据进行存储,称为拉链法

如果哈希值一样,此时发生哈希碰撞,就会调用数据所属类的equals方法比较内容是否相等,相等则用后添加的数据的value覆盖之前的value,不相等则继续向下比较键,如果都不相等,则划出一个节点存储数据

内容不同,哈希值也有可能相同

例如单链表有n个元素,遍历的时间复杂度就是O(n),而此时的红黑树遍历的时间复杂度则是O(logn)

Size指的是数组里实时存储数据的数量,不等于数组table长度,每次执行++

Serializable接口说明HashMap是可以完成序列化和反序列化  UID编译

位运算Hash&length-1  可以减少哈希碰撞,让数组空间均匀分配

按位与运算:相同的二进制数位上,都是1的时候,结果为1,否则为0

如果数组长度不是的2的n次幂,计算出的索引特别容易相同,及其容易发生Hash碰撞,导致其余数组的空间很大程度上并没有存储数据,链表或红黑树过长,效率降低

HashMap继承抽象类

集合的初始化容量DEFAULT INITIAL CAPACITY 1<<4也就是16,必须是二的n次幂

Default 默认 initial初始

DEFAULT LOAD FAVTOR=0.75f 称之为加载因子,当大于默认指的75%时,会自动扩容

LOAD FAVTOR 用来权衡集合的疏密程度>0&&<1

MAXMUM CAPACITY =2的30次幂 集合的最大容量

TREEIFY THRESHOLD=8 当链表上的节点数大于8是会形成红黑树,红黑树的节点空间是链表节点空间的两倍,通过泊松分布算出当链表节点到8时概率极低,只是一种对于时间、空间、效率的权衡

UNTREEIFY THRESHOLD = 6当节点小于6时,会从红黑树转换为链表

Node[]table存储键值对

posted on 2020-06-14 20:24  尧啊尧  阅读(186)  评论(0编辑  收藏  举报