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实现的):

     

     

     

     

     

  • 相关阅读:
    accpet和connect设置超时
    两个模块的函数如何相互调用?
    有头结点的双向链表
    信号量PV操作实现进程间同步与互斥
    linux read write函数
    函数用指针传参挂死分析
    TCP/IP为什么需要四次握手和三次挥手
    负数在内存中的表示
    malloc的堆内存挂死原因;负数的表示
    Makefiel----no rule to make target 错误问题
  • 原文地址:https://www.cnblogs.com/hf-cherish/p/4808872.html
Copyright © 2011-2022 走看看