HashMap,HashTable,ConcurrentHashMap三者的区别

本篇是整理一些面试集锦,所以只公布答案,顺带会解释一下,详情请自行百度或其他途径!
HashMap
1,从源码中我们看到是一个非线程安全的,
2,而且是key,value可以为null
3,HashMap 采取判断Key键的hash码来确定存储位置,如果hash码一致则存储在一个链表中,如果链表太大,则采取红黑树的方法,虽然这样会导致增删减慢,但是查询效率会提高
4,如果一定要在线程中使用HashMap,可以使用Collections.SynchronizedMap

HashTable
1.从源码中可以看到它的所有方法上都加了锁synchronized,所以是线程安全的,
2.key , value 不可以为null 否则会报NullPointException,
如下所示HashMap,HashTable,ConcurrentHashMap三者的区别_第1张图片
为了确保大家心存疑问,我直接贴出示例,
但key,value可以为空字符串,存储方式依然和HashMap差不多,(这里不推荐大家使用,如果真要考虑线程安全,可以使用ConcurrentHashMap)

ConcurrentHashMap这个是线程安全的,它在使用时,会调用lock锁,先上锁,执行完毕后在调用unock锁,依次来保证线程安全,
想要查看详细文章的HashMap,HashTable,推荐阅读http://www.importnew.com/24822.html

你可能感兴趣的:(面试集锦,java)