-
链表和树之间的转换
长度为8,链表转树,长度退变为6,树转链表。。中间有个差值,还可以防止链表和树频繁转换。假设8以上转为树,8以下转为链表,那么一个hashmap如果不停的插入删除,链表长度在8左右徘徊,就会不停的树转链表,链表转树,效率很低。
-
负载因子为什么是0.75
我们在考虑HashMap的时候,首先要想到的是HashMap只是一个数据结构,既然是数据结构最主要的就是节省时间和空间。负载因子的作用肯定也是节省时间和空间。为什么节省呢?我们考虑两种极端情况。
1、负载因子是1.0
我们的数据一开始是保存在数组里面的,当发生了Hash碰撞的时候,就是在这个数据节点上,生出一个链表,当链表长度达到一定长度的时候,就会把链表转化为红黑树。当负载因子是1.0的时候,也就意味着,只有当数组的8个值(这个图表示了8个)全部填充了,才会发生扩容。这就带来了很大的问题,因为Hash冲突时避免不了的。当负载因子是1.0的时候,意味着会出现大量的Hash的冲突,底层的红黑树变得异常复杂。对于查询效率极其不利。这种情况就是牺牲了时间来保证空间的利用率。
因此一句话总结就是负载因子过大,虽然空间利用率上去了,但
HashMap
最新推荐文章于 2023-09-01 06:02:01 发布