本文主要使用UML图,介绍Java和Android涉及到的容器类之间的关系,作为一个索引,来进行接下来的一些集合源码的阅读。

[TOC]

[Magic Collection & Map] Java、Android集合类概况、继承关系

容器的具体关系主要可以分为:

  • Collection
    • List:
    • Set:不可重复的一组数据
    • Queue、Deque:可以进行队列操作的数据
  • Map:键值对
  • 并发类汇总:
    • Blocking、Concurrent、CopyOnWrite

选择集合的考虑

List

  1. 数组实现:随机访问时性能最好
  2. 链表实现:在执行插入、删除操作时有很好的性能
  3. 栈和队列:queue可以作为队列,Deque可以作为队列和栈,在只需要队列的情况下应使用queue来限制操作

Set

  1. 存储不重复的数据时使用Set
  2. 对于普通的插入、删除操作,LinkedHashSet比HashSet要略慢一点,遍历会快
  3. EnumSet是所有Set实现类中性能最好的,但它只能保存同一个枚举类的枚举值作为集合元素

Map

  1. 使用HashMap而不是HashTable,HashTable需要同步消耗
  2. 需要排序再使用TreeMap,构建红黑树的方式进行排序

Collection、Iterator

Iterator,可以使用foreach 进行遍历,还有迭代器iterator() 方法进行遍历

Collection就是一个组数据的集合

打不开点击这个链接打开大图 http://i2.buimg.com/567571/d01721b1ed7c847c.png

List

作为一个线性表接口,可重复,因此可以通过索引 来指定位置的集合元素

ArrayList、LinkedList

  • ArrayList基于数组封装,默认大小是12,每次扩容至原来的1.5倍
  • LinkedList继承自AbstractSequentialList,使用链表实现,实现了Queue和Deque,可以用作队列和栈

Vector、Stack

  • Vector与ArrayList几乎一样,古老的版本,支持线程安全
  • Starck是Vector 的子类,栈的结构(后进先出)

Set

实现Collection,不能有重复的数据,使用equals来判断是否相同,使用Map来实现

HashSet、LinkedHashSet、EnumSet

  • 使用Hash来决定存储位置,使用equals+HashCode来判断两个对象是否相同
  • 继承自HashSet,使用链表实现,需要维护元素插入位置,适合遍历;实现了Deque接口,可以作为栈队列来进行使用
  • EnumSet提供给枚举类使用

SortedSet——TreeSet

  • TreeSet是SortedSet的实现,保证元素有序

Queue

ArrayQueue、PriorityQueue

数组实现的队列和优先级队列

Deque——ArrayDeque

数组实现的双端队列,可以用作队列和栈

Map

保存键值对数据(key-value)

HashMap、HashTable、LinkedHashMap

  • HashMap用key 的hashCode 值进行hash定位,用equals+hashCode方法判断两个key 相等
  • HashTable继承自Dictionary,并实现Map接口,线程安全,古老类
  • LinkedHashMap继承自HashMap,按照插入顺序排序,使用双向链表

SortedMap——TreeMap

是一个红黑树结构,会进行排序

WeakHashMap、IdentityHashMap、EnumMap

  • WeakHashMap”弱引用”,可能会被垃圾回收
  • IdentityHashMap使用“==”来进行判断key是否相等
  • EnumMap枚举类实现的Map

并发类相关

List相关:

Set相关:

Map相关:

Concurrent

  1. ConcurrentHashMap
  2. ConcurrentSkipListMap
  3. ConcurrentSkipListSet
  4. ConcurrentLinkedQueue

CopyOnWrite

  1. CopyOnWriteArrayList
  2. CopyOnWriteArraySet

Blocking

  1. LinkedBlockingDeque
  2. LinkedBlockingQueue
  3. ArrayBlockingQueue
  4. PriorityBlockingQueue

参考链接