HashMap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap之间的区别-yellowcong

来源:互联网 发布:砍价源码 编辑:程序博客网 时间:2024/05/22 21:07

这些Map集合在面试中,经常会被问道和考到,所以总结一下,HashMap和Hashtable的区别在于1、多线程;2、主键是否为空;3、继承的父类

通过Collections.synchronizedMap()的方法,将Map集合变成线程安全的。

1 HashMap和Hashtable的区别

这个问题,可能和String与StringBuffer,StringBuilder一样经常被人问道,这个问题的标准答案,基本上是三点,

No HashMap HashTable 1 继承的是AbstractMap类 继承的的是Dicionary类 2 非线程安全 线程安全 3 允许存在null的key 不允许存在空key

1.1 继承的父类

HashMap继承的是AbstractMap类
这里写图片描述

Hashtable继承的的是Dicionary类
这里写图片描述

1.2 线程安全

HashMap是非线程安全的(效率比较的高)
Hashtable是线程安全的(效率相对比较低)

1.3 Key值是否可以存在null

HashMap可以允许为空
这里写图片描述

大家可以发现如果是空的key ,先判断一下HashMap的第一个Bucket,也就是第一个Entry<K,V>(HashMap和Hashtable中,都维护的是一个Entry<K,V>[] 链表数组)中是否存在,如果存在就修改值,如果不存在,就添加这个值(添加的位置是第一个 Bucket里面)。
这里写图片描述

Hashtable是不允许存在空的key
这里写图片描述

2、LinkedHashMap

基于链表的数据结构
LinkedHashMap继承了HashMap,实现了Map接口

这里写图片描述

3、TreeMap

基于Tree 数据结构的集合

4、ConcurrentHashMap

这个是无锁多线程编程所提供的一个集合组合,是基于cpu层面的CAS原子操作,用到这个操作,只需要在取队列元素和添加队列元素的时候利用CAS原子操作,就可以保证多个线程对队列元素的有序存取

阅读全文
0 0
原创粉丝点击