Java中的Collection框架是用于存储、管理和操作对象集合的一组接口和类的统称,位于java.util
包中。它提供了多种数据结构,使得开发者无需从头实现即可高效处理数据。以下是核心内容:
1. Collection框架的层次结构
Collection
接口 :所有集合的根接口,定义了基本操作(添加、删除、遍历等)。- 子接口 :
List
:有序、允许重复(如ArrayList
,LinkedList
)。Set
:无序、不允许重复(如HashSet
,TreeSet
)。Queue
:队列结构,支持先进先出(FIFO)或优先级排序(如PriorityQueue
)。
Map
接口 :独立于Collection
接口,存储键值对(如HashMap
,TreeMap
)。
- 子接口 :
2. 核心接口与实现类
List(有序可重复)
ArrayList
:基于动态数组,查询快(O(1)),增删慢(需移动元素)。LinkedList
:基于双向链表,增删快(O(1)),查询慢(O(n)),同时实现了Deque
接口。Vector
:线程安全但性能差,通常用Collections.synchronizedList()
替代。
Set(无序不可重复)
HashSet
:基于哈希表,快速查找(O(1)),无序。LinkedHashSet
:维护插入顺序的HashSet
。TreeSet
:基于红黑树,元素按自然顺序或Comparator
排序(O(log n))。
Queue(队列)
LinkedList
:可作普通队列或双端队列(Deque
)。PriorityQueue
:元素按优先级排序(小顶堆)。
Map(键值对)
HashMap
:基于哈希表,允许null
键值,非线程安全。LinkedHashMap
:维护插入顺序或访问顺序(LRU实现)。TreeMap
:基于红黑树,按键排序。ConcurrentHashMap
:线程安全的高性能替代(优于Hashtable
)。
3. 工具类 Collections
提供静态方法操作或返回集合:
- 排序 :
Collections.sort(list)
- 同步包装 :
Collections.synchronizedList(list)
- 不可变集合 :
Collections.unmodifiableList(list)
4. 关键特性
- 泛型 :确保类型安全,如
List<String> list = new ArrayList<>();
。 - 迭代器
Iterator
:统一遍历集合,支持hasNext()
,next()
,remove()
。 - 比较器
Comparator
:定制排序逻辑,与Comparable
接口配合使用。 - Java 8+ Stream API:链式操作集合(如过滤、映射、归约)。
5. 示例代码
java
// List示例
List<String> arrayList = new ArrayList<>();
arrayList.add("Java");
arrayList.add("Python");
System.out.println(arrayList); // [Java, Python]
// Set示例
Set<Integer> hashSet = new HashSet<>();
hashSet.add(1);
hashSet.add(1); // 重复元素无效
System.out.println(hashSet); // [1]
// Map示例
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("A", 1);
hashMap.put("B", 2);
System.out.println(hashMap.get("A")); // 1
// 使用Stream API过滤
List<String> languages = Arrays.asList("Java", "Python", "C++");
List<String> filtered = languages.stream()
.filter(s -> s.startsWith("J"))
.collect(Collectors.toList()); // [Java]
6. 线程安全与并发集合
- 非线程安全类 :如
ArrayList
,HashMap
,性能高但需自行处理同步。 - 线程安全替代 :
ConcurrentHashMap
:分段锁机制,高并发场景优先使用。CopyOnWriteArrayList
:写时复制,适合读多写少。- 使用
Collections.synchronizedXXX()
包装非安全集合。
7. 选择集合的建议
- 随机访问多 →
ArrayList
- 频繁增删 →
LinkedList
- 去重 →
HashSet
- 排序需求 →
TreeSet
或TreeMap
- 键值存储 →
HashMap
- 高并发 →
ConcurrentHashMap
掌握Collection框架能显著提升代码效率和可维护性,建议结合具体场景灵活选择数据结构。