原文地址:http://www.logicbig.com/tutorials/core-java-tutorial/java-collections/java-collection-cheatsheet/
翻译类型:参考总结
文章状态:草稿
绘图工具 : Gliffy (Chrome扩展)
我为人人,人人为我,多多指正,多多建议,不断完善,共建社区,编不下去了~
1.Java集合接口
2.如何选择
2.1一般集合的选择
2.2 队列
队列的选择其实比较直观,队列的remove()方法在删除一个元素的同时会返回被删除的元素。如果你需要按特定顺序排列的队列,选择PriorityQueue,否则选择ArrayQueue。
2.3 是否需要线程安全?
当你需要线程安全安全的集合类时,你应该通过以下方法将一个非线程安全的集合转换成一个线程安全的集合:
Collection<T> synchronizedCollection(Collection<T> c)
Set<T> synchronizedSet(Set<T> s)
SortedSet<T> synchronizedSortedSet(SortedSet<T> s)
NavigableSet<T> synchronizedNavigableSet(NavigableSet<T> s)
List<T> synchronizedList(List<T> list)
以上方法,会将所有方法都同步化(在'this'上加锁),这种一刀切的方法性能上不太好,当需要强调性能的时候,我们应当使用java.util.concurrent
包中相应的集合实现类。我会在另一篇文章中详细介绍java.util.concurrent
中的集合类。
2.4 只读的集合
有些时候,我们需要将一个集合设置成只读:
Collection<T> unmodifiableCollection(Collection<T> c)
Set<T> unmodifiableSet(Set<T> s)
SortedSet<T> unmodifiableSortedSet(SortedSet<T> s)
NavigableSet<T> unmodifiableNavigableSet(NavigableSet<T> s)
List<T> unmodifiableList(List<T> list)
3.集合实现类明细
实现类 | 接口 | 是否线程安全 | 允许重复 | 允许null | 顺序 |
---|---|---|---|---|---|
ArrayList | List | 否 | 是 | 是 | 插入顺序 |
LinkedList | List, Deque | 否 | 是 | 是 | 插入顺序 |
Vector | List | 是 | 是 | 是 | 插入顺序 |
Stack | List 继承Vector | 是 | 是 | 是 | LIFO |
HashSet | Set | 否 | 否 | 是 | 不保证顺序 |
LinkedHashSet | Set | 否 | 否 | 是 | 插入顺序 |
TreeSet | Set | 否 | 否 | 否 | Comparator或Comparable |
EnumSet | Set | 否 | 否 | 否 | 枚举类型的定义顺序 |
PriorityQueue | Queue | 否 | 是 | 否 | Comparator或Comparable |
ArrayDeque | Deque | 否 | 是 | 否 | 插入顺序 |