🟦 Java 集合框架详解
1️⃣ 什么是 Java 集合框架?
- 集合框架是 Java 提供的一套统一的数据结构接口 + 实现类,用于存储、操作一组对象。
- 提供标准化方法,避免开发者重复造轮子。
- 核心特点:可扩展、统一、灵活、高效。
优点:
- 提高代码复用性。
- 提供统一接口,易于替换实现。
- 内置算法(排序、查找等),简化开发。
2️⃣ 集合框架体系结构
Collection<E>(集合根接口)
/ \
List<E>(列表) Set<E>(集合)
/ \ / \
ArrayList<E> LinkedList<E> HashSet<E> TreeSet<E>
\ /
Vector<E> LinkedHashSet<E>
Map<K,V>(映射接口,独立于 Collection)
/ \
HashMap<K,V> TreeMap<K,V>
\
LinkedHashMap<K,V>
- Collection 接口:存储一组对象的单列集合。
- List:有序,可重复,如
ArrayList
, LinkedList
, Vector
。
- Set:无序,不重复,如
HashSet
, TreeSet
, LinkedHashSet
。
- Map 接口:存储 键值对(key-value),key 不重复,如
HashMap
, TreeMap
。
3️⃣ Collection 接口常用方法
方法 | 说明 |
---|
add(E e) | 添加元素 |
remove(Object o) | 删除元素 |
contains(Object o) | 判断是否包含元素 |
size() | 集合元素数量 |
isEmpty() | 判断集合是否为空 |
clear() | 清空集合 |
iterator() | 获取迭代器 |
示例(List)
import java.util.ArrayList;
import java.util.List;
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
System.out.println(list.size()); // 2
System.out.println(list.contains("A")); // true
示例(Set)
import java.util.HashSet;
import java.util.Set;
Set<String> set = new HashSet<>();
set.add("A");
set.add("A"); // 重复,不会加入
System.out.println(set.size()); // 1
4️⃣ Map 接口常用方法
方法 | 说明 |
---|
put(K key, V value) | 添加或更新元素 |
get(Object key) | 获取 key 对应的 value |
remove(Object key) | 删除 key |
containsKey(Object key) | 判断 key 是否存在 |
containsValue(Object value) | 判断 value 是否存在 |
keySet() | 获取所有 key |
values() | 获取所有 value |
entrySet() | 获取所有键值对 |
import java.util.HashMap;
import java.util.Map;
Map<String, Integer> map = new HashMap<>();
map.put("Alice", 20);
map.put("Bob", 25);
System.out.println(map.get("Alice")); // 20
System.out.println(map.containsKey("Bob")); // true
5️⃣ List 常用实现类对比
类 | 底层结构 | 特点 | 适用场景 |
---|
ArrayList | 动态数组 | 随机访问快,增删慢 | 查询多 |
LinkedList | 双向链表 | 插入删除快,随机访问慢 | 插入删除多 |
Vector | 动态数组 | 线程安全(同步方法),较慢 | 老旧项目 |
Stack(继承 Vector) | 栈 | 先进后出 | 特殊栈操作 |
6️⃣ Set 常用实现类对比
类 | 底层结构 | 特点 | 适用场景 |
---|
HashSet | 哈希表 | 无序、不重复,查询快 | 去重、查找 |
LinkedHashSet | 哈希 + 链表 | 保证插入顺序 | 需要顺序的去重 |
TreeSet | 红黑树 | 有序、不重复 | 排序需求集合 |
7️⃣ Map 常用实现类对比
类 | 底层结构 | 特点 | 适用场景 |
---|
HashMap | 哈希表 | 无序,key 唯一 | 快速查找 |
LinkedHashMap | 哈希 + 链表 | 保证插入顺序 | 需要顺序的映射 |
TreeMap | 红黑树 | 按 key 排序 | 排序映射 |
Hashtable | 哈希表 | 线程安全(同步方法) | 老旧项目 |
8️⃣ 遍历集合
(1)List / Set 遍历
List<String> list = List.of("A", "B", "C");
// 增强 for 循环
for (String s : list) { System.out.println(s); }
// Iterator
import java.util.Iterator;
Iterator<String> it = list.iterator();
while (it.hasNext()) { System.out.println(it.next()); }
// Java 8 Lambda
list.forEach(System.out::println);
(2)Map 遍历
Map<String, Integer> map = Map.of("Alice", 20, "Bob", 25);
// 遍历 key
for (String key : map.keySet()) { System.out.println(key); }
// 遍历 value
for (Integer value : map.values()) { System.out.println(value); }
// 遍历 entry
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}
9️⃣ 集合常用工具类:Collections
import java.util.ArrayList;
import java.util.Collections;
ArrayList<Integer> list = new ArrayList<>();
list.add(5);
list.add(2);
list.add(9);
Collections.sort(list); // 升序排序
Collections.reverse(list); // 反转
System.out.println(Collections.max(list)); // 最大值
System.out.println(Collections.min(list)); // 最小值
10️⃣ 总结
- Collection:存储单列数据
- Map:存储键值对
- 常用方法:增删改查、遍历、排序
- 选择建议:
- 查询多 → ArrayList / HashMap
- 插入删除多 → LinkedList / LinkedHashMap
- 需要排序 → TreeSet / TreeMap
发表回复