美文网首页
Java Map总结

Java Map总结

作者: 王振 | 来源:发表于2018-07-09 22:42 被阅读0次

    HashMap

    HashMap中键值

    1. 允许为空(null)
    2. 并且是非同步的

    Hashtable

    Hashtable中键值

    1. 不允许为空
    2. 是同步的

    Hashtable和ConcurrentHashMap有什么分别呢?

    1. 它们都可以用于多线程的环境
    2. 但是当Hashtable的大小增加到一定的时候,性能会急剧下降,因为迭代时需要被锁定很长的时间。
    3. 因为ConcurrentHashMap引入了分割(segmentation),不论它变得多么大,仅仅需要锁定map的某个部分,而其它的线程不需要等到迭代完成才能访问map。
    4. 简而言之,在迭代的过程中,ConcurrentHashMap仅仅锁定map的某个部分,而Hashtable则会锁定整个map。

    ConcurentSkipListMap

    ConcurrentSkipListMap继承AbstractMap,实现ConcurrentMap:

    1. SkipList跳表
      Skip List是一种随机化的数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间)。基本上,跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表(因此得名)。所有操作都以对数随机化的时间进行。Skip List可以很好解决有序链表查找特定值的困难。
    2. ConcurrentSkipListMap
      ConcurrentSkipListMap提供了一种线程安全的并发访问的排序映射表。内部是SkipList(跳表)结构实现,在理论上能够在O(log(n))时间内完成查找、插入、删除操作。调用ConcurrentSkipListMap的size时,由于多个线程可以同时对映射表进行操作,所以映射表需要遍历整个链表才能返回元素个数,这个操作是个O(log(n))的操作。

    TreeMap 简介

    1. TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。
    2. TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合。
    3. TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合。
    4. TreeMap 实现了Cloneable接口,意味着它能被克隆
    5. TreeMap 实现了java.io.Serializable接口,意味着它支持序列化
    6. TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
    7. TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n) 。
    8. TreeMap是非同步的。 它的iterator 方法返回的迭代器是fail-fastl的。

    相关文章

      网友评论

          本文标题:Java Map总结

          本文链接:https://www.haomeiwen.com/subject/vkdxpftx.html