图一:java collection 类图 

java 修改array长度 java arraydeque_java

  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。
  1. List家族
  1. Vector和ArrayList基本一样,都是Collection家族List下的实现类,都是可变数组,只不过Vector是线程同步的,ArrayList不是。所以一般如果没有同步要求,都建议使用ArrayList
  2. LinkedList实现了很多接口,如List,Deque,它是双向链表,链表的一般操作都支持。不过也是单线程的(即非同步的),但是可能因为太大了?-->反正不经常使用
  1. Map家族
  1. HashMap和HashTable差不多。不过HashMap是单线程(非同步)的,而且支持null(键和值都是null)。HashTable是同步的,且键和值都不能为null。常用HashMap
  1. 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容器的操作方法的返回值

java 修改array长度 java arraydeque_Stack_02

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

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

java 修改array长度 java arraydeque_Stack_03

java 修改array长度 java arraydeque_数据结构与算法_04

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

java 修改array长度 java arraydeque_java_05

2015-09-14 23:23 HF_Cherish