容器(Collection/Map)、容器中的设计模式
1.容器
主要包括:
- Collection:存储着对象的集合
- Map:存储着键值对(两个对象) 的映射表。
1.1 Collection

- Set
- List
- Queue
1.1.1 Set
- TreeSet:
- HashSet
- LinkedHashSet
对比:
| 基于 | 支持 | 时间复杂度 | |
|---|---|---|---|
| TreeSet | 红黑树 | 有序性操作 | O(logN) |
| HashSet | 哈希表 | 快速查,不支持有序性操作 | O(N) |
| LinkedHashSet | 双向链表 | 使用双向链表维护 | O(N) |
1.1.2 List
- ArrayList
- Vector
- LinkedList
对比:
| 基于 | 支持 | 线程安全? | |
|---|---|---|---|
| ArrayList | 动态数组 | 随机访问 | 否 |
| Vector | 动态数组 | 随机访问 | 是 |
| LinkedList | 双向链表 | 只能顺序访问; 可快速插入删除; 可以用作栈、队列和双向队列 | 否 |
1.1.3 Queue
- LinkedList
- PriorityQueue
对比:
| 基于 | 可实现 | |
|---|---|---|
| LinkedList | 双向链表 | 双向队列 |
| PriorityQueue | 堆 | 优先队列 |
1.2 Map

- TreeMap
- Hashtable
- LinkedHashMap
- HashMap
对比:
| 基于 | 线程安全? | |
|---|---|---|
| TreeMap | 红黑树 | 否 |
| Hashtable* | 哈希表 | 是 |
| LinkedHashMap | 用双向链表维护元素的顺序 顺序为插入顺序或者 最近最少使用(LRU) 顺序 | 否 |
| HashMap | 哈希表 | 否 |
*:Hashtable是遗留类,不建议使用。现在可以使用 ConcurrentHashMap 来支持线程安全,并且ConcurrentHashMap 的效率会更高,因为 ConcurrentHashMap 引入了分段锁。
2.容器中的设计模式
2.1 迭代器模式

Collection 实现了 Iterable 接口,其中的 iterator() 方法能够产生一个 Iterator 对象,通过这个对象就可以迭代遍历 Collection 中的元素。
从 JDK 1.5 之后可以使用 foreach 方法来遍历实现了 Iterable 接口的聚合对象:
List list = new ArrayList<>();list.add("a");list.add("b");for (String item : list) {System.out.println(item);}
2.2 适配器模式
java.util.Arrays#asList() 可以把数组类型转换为 List 类型:
@SafeVarargs
public static List asList(T... a)
应该注意的是 asList() 的参数为泛型的变长参数,不能使用基本类型数组作为参数,只能使用相应的包装类型数组。
Integer[] arr = {1, 2, 3};
List list = Arrays.asList(arr);
也可以使用以下方式调用 asList():
List list = Arrays.asList(1,2,3);
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
