集合框架概述
集合框架(Collection Framework)是Java中用于存储、操作和传输数据的标准化架构。它提供了一组接口、实现类和算法,用于处理对象集合,简化了数据结构的操作。
核心目标:
-
性能优异:提供不同数据结构的实现(如数组、链表、哈希表、树),以满足不同场景的性能需求。
-
互操作性:不同集合类型之间的交互有统一的接口规范。
-
易学易用 :API 设计清晰,方法命名一致(如
add、remove、size)。
与数组的区别:
| 特性 | 数组 | 集合 |
|---|---|---|
| 长度 | 固定 | 动态可变 |
| 存储类型 | 基本类型 + 对象 | 只能存储对象(基本类型需包装类) |
| 功能 | 简单,仅有 length 属性 | 丰富,提供排序、查找、同步等高级功能 |
核心接口
- Collection :根接口,定义了通用方法(如
add(),remove(),size())。 - List :有序集合,允许重复元素(如
ArrayList,LinkedList)。 - Set :无序集合,不允许重复元素(如
HashSet,TreeSet)。 - Queue :队列结构,支持先进先出(FIFO)操作(如
PriorityQueue)。 - Map :键值对存储,独立于
Collection接口(如HashMap,TreeMap)。
常用实现类
- ArrayList:基于动态数组,适合随机访问。
- LinkedList:基于双向链表,适合频繁插入/删除。
- HashSet:基于哈希表,快速查找,无序。
- TreeSet:基于红黑树,元素自动排序。
- HashMap :键值对存储,允许
null键/值。 - LinkedHashMap:保持插入顺序或访问顺序。
示例代码
java
// List示例
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
System.out.println(list); // 输出: [Java, Python]
// Set示例
Set<Integer> set = new HashSet<>();
set.add(10);
set.add(20);
set.add(10); // 重复元素不会被添加
System.out.println(set); // 输出: [20, 10]
// Map示例
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
System.out.println(map.get("A")); // 输出: 1
工具类
- Collections :提供静态方法(如排序
sort()、反转reverse())。 - Arrays :处理数组与集合的转换(如
asList())。
注意事项
- 线程安全:多数集合类非线程安全,需使用
Collections.synchronizedList()或并发包(如ConcurrentHashMap)。 - 性能选择:根据场景选择实现类(如频繁查询用
ArrayList,频繁修改用LinkedList)。
List 体系(重点)
特点:有序、可重复、有下标
常用实现类:
-
ArrayList
- 底层:动态数组
- 优点:查询快、遍历快
- 缺点:增删慢(要移动元素)
- 线程不安全
-
LinkedList
- 底层:双向链表
- 优点:增删快
- 缺点:查询慢
- 可当作栈、队列、双端队列
-
Vector
- 底层数组,线程安全,效率低,基本不用
Set 体系(重点)
特点:无序、不可重复、无索引
常用实现类:
-
HashSet
- 底层:HashMap(哈希表)
- 去重原理:
hashCode()+equals() - 无序、高效
-
LinkedHashSet
- 底层:哈希表 + 双向链表
- 保证:插入有序 + 去重
-
TreeSet
- 底层:红黑树
- 特点:自动排序(自然排序 / 比较器排序)
- 去重:根据比较结果是否为 0
遍历方式(Collection 通用)
-
迭代器 Iterator(最通用)
Iterator<String> it = coll.iterator();
while (it.hasNext()) {
String s = it.next();
} -
增强 for 循环
for (String s : coll) { }
-
forEach + Lambda(JDK8+)
coll.forEach(s -> System.out.println(s));
选择建议(面试/开发实用):

