集合相关的类有一大堆,通常也只用到经常使用的方法增删改查,并且它它们的方法名也基本同样,因此一直都不知道何时用什么集合,android
今天趁有空特地从网上整理资料方便往后回忆。数组
1、List:、有顺序以线性方式存储,能够存放重复对象安全
线程安全方法:List list = Collections.synchronizedList(new LinkedList(...));数据结构
LinkedList:双向链表实现存储 索引数据慢插入数度较快 线程不安全(比安全性能好)性能
ArrayList:数组方式存储数据 索引数据快插入数据慢 线程不安全spa
Vector:数组方式存储数据 索引数据快插入数据慢 线程安全.net
Stack:继承自Vector,实现一个后进先出的堆栈线程
2、Set:无顺序,不包含重复的元素设计
HashSet:为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。 对象
TreeSet: 保存次序的Set, 底层为树结构。使用它能够从Set中提取有序的序列。
LinkedHashSet:具备HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。因而在使用迭代器遍历Set时,结果会按元素插入的次序显示。
3、Map:键必须是惟一
同步方法:Map m = Collections.synchronizedMap(new TreeMap(...));
Hashtable:基于散列表的实现 容许空键空值 线程安全
HashMap:基于散列表的实现 容许空键空值 线程不安全 (与Hashtable基本一致)
TreeMap: 基于红黑树数据结构的实现 不容许空键空值 线程不安全
WeakHashMap:改进的HashMap,它对key实行“弱引用”,若是一个key再也不被外部所引用,那么该key能够被GC回收。
在除须要排序时使用TreeSet,TreeMap外,都应使用HashSet,HashMap,由于他们的效率更高。
4、SparseArray<E>:采用了二分法方式存储数据(安卓的一个集合类)
android系统建议咱们用SparseArray<E>来代替HashMap<Integer, E>
SparseArray的使用基本与List同样,在些不详细解说,你们能够看http://blog.csdn.net/xyz_fly/article/details/793194