【 集合总结 】

1、HashMap,HashTable,ConcurrentHashMap的区别

  • HashMap是非线程安全的,HashTable是线程安全的。
  • HashMap的键和值都允许有null值存在,而HashTable则不行。
  • 因为线程安全的问题,HashMap 效率比 HashTable 的要高。

HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap非线程安全,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap。

Hashtable:Hashtable是遗留类,很多映射的常用功能与HashMap类似,不同的是它承自Dictionary类,并且是线程安全的,任一时间只有一个线程能写Hashtable,并发性不如ConcurrentHashMap,因为ConcurrentHashMap引入了分段锁。

2、极高并发下HashTable和ConcurrentHashMap哪个性能更好,为什么,如何实现的。

当然是ConcurrentHashMap,因为ConcurrentHashMap引入了分段锁,而HashTable则使用的是方法级别的锁;因此在新版本中一般不建议使用HashTable,不需要线程安全的场合可以使用HashMap,而需要线程安全的场合可以使用ConcurrentHashMap;

彻底搞懂HashMap,HashTable,ConcurrentHashMap之关联:
https://www.cnblogs.com/wang-meng/p/5808006.html

3、HashMap在高并发下如果没有处理线程安全会有怎样的隐患,具体表现是什么。

可能造成死循环,具体表现链表的循环指向;

猜你喜欢

转载自blog.csdn.net/weixin_42112635/article/details/88778614