HashMap和Hashtable的区别

xxsxxsxxsx 2020-10-17 06:48:24
那么多大佬解释这个问题,太长了根本看不进去,自己简短总结一下吧!
1、HashMap是线程不安全的,在多线程环境下会容易产生死循环,但是单线程环境下运行效率高;Hashtable线程安全的,很多方法都有synchronized修饰,但同时因为加锁导致单线程环境下效率较低。
2、HashMap允许有一个key为null,允许多个value为null;而Hashtable不允许key或者value为null
3,底层数组的长度不同HashMap的底层数组的长度必须为2^n,这样做的好处是为以后的hash算法做准备,而Hashtable底层数组的长度可以为任意值,这就造成了当底层数组长度为合数的时候,Hashtable的hash算法散射不均匀,容易产生hash冲突。
4,哈希算法不同Hashtable的hash算法首先使得hash的值小于等于整型数的最大值,再通过%运算实现均匀散射。
由于计算机是底层的运算是基于2进制的,所以HashMap的hash算法使用&运算代替%运算,在运算速度上明显HashMap的hash算法更优。
5,扩容的机制有区别:HashMap数组的扩容的整体思想就是创建一个长度为原先2倍的数组。然后对原数组进行遍历和复制
Hashtable的扩容将先创建一个长度为原长度2倍的数组,再使用头插法将链表进行反序
6,结构有区别:HashMap在jdk1.8在原先的数组+链表的结构进行了优化,将实现结构变为数组+链表+红黑树,在一条链表节点元素大于8的时候,会将链表封装成红黑树
Hashtable到了jdk1.8了内部结构并没有实质优化,继续使用数组+链表的方式实现
...全文
3952 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxsxxsxxsx 2020-10-20
  • 打赏
  • 举报
回复
谢大佬指点,又学到新的
KeepSayingNo 2020-10-19
  • 打赏
  • 举报
回复
还可以更简短 一个是map,一个是dictionary。 所以下次面试官问你,你就说这个不应该放在一起比较,因为本质都不同
韩_师兄 2020-10-17
  • 打赏
  • 举报
回复
总结得很到位

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧