HashMap与HashTable的区别
- 相同点
- 二者存储结构
- 二者实现原理
- 不同点
- HashTable相对于HashMap是
线程安全的
- 不允许
key
、value
为null
- HashTable是一个过时的集合类,目前不建议使用,当需要线程安全时,可以使用CurrentHashMap
HashMap的总结
- JDK1.8 HashMap的底层是 数组 + 链表 + 红黑树
- 装在因子
- 何时扩容:装载因子*初始容量小于散列表的元素时,进行扩容
- 扩容为原来的2倍
- 装载因子默认值是 0.75
- 初始化指定的装载因子,无论大小都会对HashMap性能产生不好的影响
- 装载因子大了
- 可以减小再散列的次数,但是会增加hash碰撞的概率,也会耗费性能:操作链表 + 红黑树
- 装载因子小了
- 可以减少hash碰撞的概率,但是会增加扩容(再散列)的次数
- 初始化容量
- 默认 16 必须为2的幂次
- 初始化容量大了
- 遍历的速度会减慢
- 初始化容量小了
- 扩容次数(再散列)会变多
- 对随机性的处理
- 并不是直接拿key的hashCode来用,而是让其与自己的高16位做异或运算,增加了
元素放入Hash表的随机性
- 桶转为红黑树时的注意事项
- 并不是桶上满8个元素直接转->红黑树,还要满足散列表容量大于64才行
posted @
2021-08-03 10:11
触碰A阳光
阅读(
35)
评论()
编辑
收藏
举报