Java Collections Framework (JCF) 是一个统一的架构,用于表示和操作集合。它包含以下主要组件:
- Interfaces:定义了不同类型的集合行为
- Implementations:提供了接口的具体实现
- Algorithms:对集合执行有用的操作的方法
主要接口分类
1. Collection 接口
这是集合层次结构的根接口。
子接口:
List 接口
- 特点:有序集合(序列),允许重复元素
- 索引访问:可以通过整数索引访问元素
- 主要实现类:
ArrayList: 动态数组实现,非线程安全LinkedList: 双向链表实现,适合频繁插入删除Vector: 同步版本的ArrayListStack: 继承自Vector,后进先出栈
主要方法:
- **添加元素**:
- `add(E element)`:在列表末尾添加元素
-
add(int index, E element):在指定位置插入元素 -
addAll(Collection<? extends E> c):添加集合中的所有元素 -
访问元素: -
get(int index):获取指定位置的元素indexOf(Object o):返回指定元素第一次出现的索引lastIndexOf(Object o):返回指定元素最后一次出现的索引
-
修改元素: -
set(int index, E element):替换指定位置的元素 -
删除元素: -
remove(int index):删除指定位置的元素remove(Object o):删除指定元素的第一个匹配项
-
其他方法: -
size():返回列表大小isEmpty():判断列表是否为空- `subList(int fr
// 示例用法
List<String> list = new ArrayList<>();
list.add("item1");
list.add(0, "item2"); // 在指定位置插入
Set 接口
- 特点:不允许重复元素的集合
- 主要实现类:
HashSet: 基于哈希表实现,无序且快速查找LinkedHashSet: 保持插入顺序的HashSetTreeSet: 基于红黑树实现,排序集合
主要方法:
-
添加元素:
add(E e):添加元素,如果集合中已存在该元素则返回false
-
删除元素:
remove(Object o):删除指定元素
-
批量操作:
addAll(Collection<? extends E> c):添加集合中的所有元素removeAll(Collection<?> c):删除集合中包含的所有元素retainAll(Collection<?> c):只保留集合中包含的元素
-
查询操作:
contains(Object o):检查是否包含指定元素size():返回集合大小isEmpty():判断集合是否为空
// 示例用法
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
Queue 接口
- 特点:队列,通常按照先进先出(FIFO)原则排序
- 主要实现类:
LinkedList: 实现了Queue接口PriorityQueue: 基于堆的优先级队列ArrayDeque: 双端队列实现
主要方法:
-
添加元素:
add(E e):添加元素,如果队列满则抛出异常offer(E e):添加元素,如果队列满则返回false
-
移除元素:
remove():移除并返回队首元素,如果队列空则抛出异常poll():移除并返回队首元素,如果队列空则返回null
-
检查元素:
element():返回队首元素但不移除,如果队列空则抛出异常peek():返回队首元素但不移除,如果队列空则返回null
// 示例用法
Queue<String> queue = new LinkedList<>();
queue.offer("first");
String item = queue.poll(); // 移除并返回头部元素
2. Map 接口
- 注意:不继承自
Collection接口 - 特点:键值对映射关系,键唯一
- 主要实现类:
HashMap: 哈希表实现,允许null键和值LinkedHashMap: 保持插入顺序的HashMapTreeMap: 基于红黑树的排序MapHashtable: 同步版本,不推荐使用ConcurrentHashMap: 线程安全的HashMap替代品
主要方法:
-
添加/替换映射:
put(K key, V value):添加键值对putAll(Map<? extends K, ? extends V> m):复制所有映射putIfAbsent(K key, V value):如果键不存在则添加
-
查询操作:
get(Object key):根据键获取值getOrDefault(Object key, V defaultValue):获取值,如果键不存在则返回默认值containsKey(Object key):检查是否包含指定键containsValue(Object value):检查是否包含指定值
-
删除操作:
remove(Object key):根据键删除映射remove(Object key, Object value):只有当键值匹配时才删除
-
视图方法:
keySet():返回键的Set视图values():返回值的Collection视图entrySet():返回键值对的Set视图
-
其他方法:
size():返回映射数量isEmpty():判断映射是否为空clear():清空所有映射
// 示例用法
Map<String, Integer> map = new HashMap<>();
map.put("key", 1);
Integer value = map.get("key");
特殊用途集合
并发集合 (java.util.concurrent)
CopyOnWriteArrayList: 写时复制的线程安全ListConcurrentLinkedQueue: 高性能并发队列BlockingQueue: 支持阻塞操作的队列接口及其实现
工具类
Collections: 提供静态方法操作或返回集合Arrays: 操作数组的工具类,可转为List
性能对比与选择建议
| 集合类型 | 查找效率 | 插入/删除效率 | 是否有序 | 允许重复 | 线程安全 |
|---|---|---|---|---|---|
| ArrayList | O(n) | O(n) | 是 | 是 | 否 |
| LinkedList | O(n) | O(1) | 是 | 是 | 否 |
| HashSet | O(1) | O(1) | 否 | 否 | 否 |
| TreeSet | O(log n) | O(log n) | 是(排序) | 否 | 否 |
| HashMap | O(1) | O(1) | 否 | 键否值是 | 否 |
| TreeMap | O(log n) | O(log n) | 是(排序) | 键否值是 | 否 |
根据具体需求选择合适的集合类型可以显著提升程序性能。