hashmap,hashtable,treemap,concurrentHashMap区别与联系

参考网址:https://www.cnblogs.com/zx-bob-123/archive/2017/12/26/8118074.html

    这里面介绍的很详细。   

1.hashmap,hashtable

    都是基于哈希表实现的,每个元素都是一个key--value对,对内部通过单链表解决冲突问题,容量不足时会自动增长,实现了Serializable接口,它支持序列化,实现了Cloneable接口,能被克隆。

    不过两者继承父类不同,hashmap继承AbstractMap类,hashtable继承Dictionary类。

    hashtable中的key  value都不允许出现null值,hashmap可以。

    hashmap中没有contains方法。

    内部实现使用的数组初始化和扩容方式不同

      HashTable在不指定容量的情况下的默认容量为11,而HashMap为16,Hashtable不要求底层数组的容量一定要为2的整数次幂,而HashMap则要求一定为2的整数次幂。
    Hashtable扩容时,将容量变为原来的2倍加1,而HashMap扩容时,将容量变为原来的2倍。

    hashmap不同步,线程不安全。hashtable同步,线程安全。

    2.hashtable,concurrenthashmap区别

     ConcurrentHashMap是线程安全的HashMap的实现。

    HashTable里使用的是synchronized关键字,这其实是对对象加锁,锁住的都是对象整体,当Hashtable的大小增加到一定的时候,性能会急剧下降,因为迭代时需要被锁定很长的时间。

     ConcurrentHashMap使用了分割,将一个map分成多个小的hashtable,对map的一部分进行上锁。保证同步的同时,有提高了性能。

    3.treemap:

    是一个有序的key-value集合,它是通过红黑树实现的。

    继承于AbstractMap,所以它是一个Map,即一个key-value集合。
    实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合。
    TreeMap 实现了Cloneable接口,意味着它能被克隆
    TreeMap 实现了java.io.Serializable接口,意味着它支持序列化

    TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
    TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n) 。
    另外,TreeMap是非同步的。 它的iterator 方法返回的迭代器是fail-fastl的。


猜你喜欢

转载自blog.csdn.net/qq_36746327/article/details/79633208