java 基础
1、hashMap 原理 是一个key value 的存储结构。把key 经过hash算法行程一个索引,在理想的过程中,行程的key是惟一的,但是不理想的状况,就会出现相同的索引,也就是hash碰撞。
解决hash冲突
JDK1.7的时候,用链表+数组
JDK1.8引入了红黑树 当链表的长度大于等于8,会先判断数组如果大于64会转化为红黑树,小于的话,会先扩容。
put的时候, key 和value 转换为entryset,。 把key做hash计算,出hashcode 。作为index, 存到数组中, 存的时候, 当hashcode重复的时候,会把后面的用链表的插入到前面的一个后面,也就是链表
当key一致的时候,直接替换value值。
往出取的时候,hashcode一致的时候,遍历链表。
数组的扩容原理: 1.7 把数组进行扩容, 先生成新的数组, 把来位置的元素,转移到新的数组 。 添加元素的时候去判断,要不要去扩容 , 容量是之前的两倍。 在链表上算新数组的小标是如何的。
1.8 对红黑树的转移, 树上的每个节点,在新的树的节点如何转移。
浙公网安备 33010602011771号