1、HashMap和HashTable的区别
- 区别
- ①、HashMap是非线程安全的,HashTable是线程安全的
- ②、HshMap的键和值都允许 null 值存在,而HashTable则不行
- ③、因为线程安全问题,HashMap效率比HashTable要高
- ④、HashTable是同步的,而HashMap不是;因此,HashMap更适合单线程环境,HashTable适合多线程环境
- 不过现在不建议用HashTable,一方面是HashTable是遗留类,内部的实现很多没有优化和冗余,另一个方面是,即使在多线程环境下,现在也有同步的ConcurrentHashMap替代,没有必要因为是多线程而用HashTable
2、补充:HashTable和ConcurrentHashMap的区别
- HashTable使用的是
Synchronized
关键字修饰,ConcurrentHashMap是JDK1.7使用了锁分段技术来保证线程安全;JDK1.8ConcurrentHashMap取消了Segment
分段锁,采用了CAS和sychronized
来保证并发安全
- ConcurrentHashMap数据结构跟HashMap1.8的结构类似,数组 + 链表/红黑二叉树
synchronized
只锁定当前链表或红黑树二叉树的首节点,这样只要hash不冲突,就不会产生并发,效率又提升N倍
posted @
2022-08-02 13:56
OnlyOnYourself-Lzw
阅读(
31)
评论()
编辑
收藏
举报