HF_Cherish

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

 

 

 

 

 

posted on 2015-09-14 23:23  HF_Cherish  阅读(1296)  评论(0编辑  收藏  举报