zoukankan      html  css  js  c++  java
  • java常用集合类:Deque,ArrayList,HashMap,HashSet

                                                                                                             图一:java collection 类图 

    1. Queue家族
      1. 无论是queue还是stack,现在常用的是Deque的实现类:如单线程的ArrayQueue,多线程的ArrayBlockingQueue
      2. Deque:读作“deck”,算是一种“双端队列”,即支持头部和尾部的数据访问和增删。----支持stack和queue的操作
      3. 关系:ArrayDeque --> Deque(I) -> Queue(I) -> Collection(I),其中->表示继承,-->表示实现,(I)表示接口。
      4. 关系:Stack -> Vector ->AbstractList。Stack的方法不如Deque完整和稳定,所以优先采用Deque的实现类来表示Stack。
    2. List家族
      1. Vector和ArrayList基本一样,都是Collection家族List下的实现类,都是可变数组,只不过Vector是线程同步的,ArrayList不是。所以一般如果没有同步要求,都建议使用ArrayList
      2. LinkedList实现了很多接口,如List,Deque,它是双向链表,链表的一般操作都支持。不过也是单线程的(即非同步的),但是可能因为太大了?-->反正不经常使用
    3. Map家族
      1. HashMap和HashTable差不多。不过HashMap是单线程(非同步)的,而且支持null(键和值都是null)。HashTable是同步的,且键和值都不能为null。常用HashMap
    4. Set家族
      1. HashSet背后是HashMap在支撑,其add()操作添加的就是键值,因此HashSet不允许插入重复的值,当然允许插入null(hashmap允许空键)

    Collection总结: 

    上边是我常用的,这里copy一篇文章的总结(其中的deprecated应该指不常用,不赞成使用,倒不是废弃了):http://www.importnew.com/13801.html

      单线程 并发
    Lists
    • ArrayList——基于泛型数组
    • LinkedList——不推荐使用
    • Vector——已废弃(deprecated)
    • CopyOnWriteArrayList——几乎不更新,常用来遍历
    Queues / deques
    • ArrayDeque——基于泛型数组
    • Stack——已废弃(deprecated)
    • PriorityQueue——读取操作的内容已排序
    • ArrayBlockingQueue——带边界的阻塞式队列
    • ConcurrentLinkedDeque / ConcurrentLinkedQueue——无边界的链表队列(CAS)
    • DelayQueue——元素带有延迟的队列
    • LinkedBlockingDeque / LinkedBlockingQueue——链表队列(带锁),可设定是否带边界
    • LinkedTransferQueue——可将元素`transfer`进行w/o存储
    • PriorityBlockingQueue——并发PriorityQueue
    • SynchronousQueue——使用Queue接口进行Exchanger
    Maps
    • HashMap——通用Map
    • EnumMap——键使用enum
    • Hashtable——已废弃(deprecated)
    • IdentityHashMap——键使用==进行比较
    • LinkedHashMap——保持插入顺序
    • TreeMap——键已排序
    • WeakHashMap——适用于缓存(cache)
    • ConcurrentHashMap——通用并发Map
    • ConcurrentSkipListMap——已排序的并发Map
    Sets
      • HashSet——通用set
      • EnumSet——enum Set
      • BitSet——比特或密集的整数Set
      • LinkedHashSet——保持插入顺序
      • TreeSet——排序Set

     

    • ConcurrentSkipListSet——排序并发Set
    • CopyOnWriteArraySet——几乎不更新,通常只做遍历

     


     

     Deque总结:

    Deque不常用,这里简单总结下它的用法:

    • Deque是双端队列,可以在队首和队尾访问和增删元素。不支持随机访问(List接口支持随机访问元素)
    • 下标中返回Special value的,针对的是有容量限制的Deque容器的操作方法的返回值

    • Queue和Stack都可以用双端队列来实现
    • Deque的Queue实现:在队首删除或访问数据,在队尾插入数据
    • Deque的Stack实现:在队首删除、访问、插入数据

    Queue和Stack方法与Deque的对应关系如下:(Queue和Stack相应的方法名在Deque中也都支持,其实现是通过调用下表右列中的方法。)

    • 注意Queue相关的方法有六个,其实可以分为两组,如下表所示(返回special value也是针对容量有限制的Queue实现的):

     

     

     

     

     

  • 相关阅读:
    zoj 3279 线段树 OR 树状数组
    fzu 1962 树状数组 OR 线段树
    hdu 5057 块状链表
    hdu3487 Play with Chain
    bzoj 1588营业额统计(HNOI 2002)
    poj2823 Sliding Window
    poj2828 Buy Tickets
    poj2395 Out of Hay
    poj3667 Hotel
    poj1703 Lost Cows
  • 原文地址:https://www.cnblogs.com/hf-cherish/p/4808872.html
Copyright © 2011-2022 走看看