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

java 专栏收录该内容
105 篇文章 0 订阅

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

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

1 HashMap和Hashtable的区别

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

NoHashMapHashTable
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
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值