欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于HashMap、HashTable、TreeHash、ConcurrentHashMap的区别

程序员文章站 2022-03-03 08:25:17
...

关于HashMap、HashTable、TreeHash、ConcurrentHashMap的区别

描述:它们都是Map接口的实现类,并且是以键-值对的形式,键(key)是唯一的,值(value)可以重复

1.线程问题

   HashMap是线程不安全的,它的方法没有synchronize关键字进行修饰
   ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200429015214206.png)
   HashTable是线程安全的,它的方法有synchronize关键字进行修饰,同步锁效率低
   ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200429015142728.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzYzNDk5,size_16,color_FFFFFF,t_70)
   treeMap是可以进行排序的,默认按照键的自然顺序进行升序排序,若要进行降序排序则需要在构造集合时候传递一个比较器
   concurrentHashMap:ConCurrentHashMap 就是解决HashMap线程不安全,和HashTable同步锁效率低的问题。ConCurrentHashMap是采用分段锁的技术,在多线程并发的情况下,会先把数据分成一段一段的存储,然后每一段数据配一把锁,当一个线程占用一段数据时,其他段的数据也可以被其他的线程访问

2、空值问题

hashMap:允许key和value为null
hashTable:它的key和value都不可以为null
treeMap:它的key和value都不可以为null
concurrentHashMap:它的key和value都不可以为null

3、数据结构问题

hashMap:HashMap实际上是一个“链表散列”的数据结构,是数组和链表的结合体。HashMap底层就是一个数组结构,数组中的每一项又是一个链表。
hashTable:和HashMap一样,也是一个散列表的数据结构
treeMap:TreeMap的实现是红黑树算法的数据结构
concurrentHashMap:可以说这是一个二级的哈希表