《Java 集合框架入门指南:从 Collection 到 Map,基础概念一次吃透》
·
Java 集合框架入门指南:从 Collection 到 Map,基础概念一次吃透
一、集合框架全景图
Java集合框架(JCF)位于java.util包中,核心接口构成树形结构:
Iterable
└── Collection
├── List
├── Set
└── Queue
Map
关键特性:
Collection存储单一元素Map存储键值对- 所有实现类支持泛型(如
ArrayList<String>)
二、Collection 体系精解
1. List 接口(有序可重复)
// ArrayList 示例(数组实现)
List<String> arrayList = new ArrayList<>();
arrayList.add("Java");
arrayList.get(0); // $O(1)$ 时间复杂度访问
// LinkedList 示例(链表实现)
List<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.get(0); // $O(n)$ 时间复杂度访问
实现类对比:
| 特性 | ArrayList | LinkedList |
|---|---|---|
| 底层结构 | 动态数组 | 双向链表 |
| 随机访问 | $O(1)$ | $O(n)$ |
| 头部插入 | $O(n)$ | $O(1)$ |
2. Set 接口(无序唯一)
// HashSet 示例(哈希表实现)
Set<String> hashSet = new HashSet<>();
hashSet.add("Apple");
hashSet.add("Apple"); // 重复元素自动过滤
// TreeSet 示例(红黑树实现)
Set<Integer> treeSet = new TreeSet<>();
treeSet.add(3);
treeSet.add(1); // 自动排序输出 [1,3]
数学本质:Set 遵循集合论公式 $$ A \cup B = {x \mid x \in A \lor x \in B} $$
3. Queue 接口(先进先出)
Queue<String> queue = new LinkedList<>();
queue.offer("First");
queue.poll(); // 取出"First"
三、Map 体系深度剖析
核心实现类
// HashMap 示例
Map<String, Integer> map = new HashMap<>();
map.put("age", 25);
map.get("age"); // 返回25
// TreeMap 示例(按键排序)
Map<Integer, String> treeMap = new TreeMap<>();
treeMap.put(3, "C");
treeMap.put(1, "A"); // 自动按key排序 {1=A, 3=C}
哈希冲突解决: 采用链地址法,当哈希碰撞时: $$ h(k) \rightarrow \text{桶位置} $$ 桶内使用链表/红黑树存储
四、关键选择策略
-
元素唯一性需求
- 需要唯一:
Set体系 - 允许重复:
List体系
- 需要唯一:
-
排序需求
- 自然排序:
TreeSet/TreeMap - 插入顺序:
LinkedHashSet/LinkedHashMap
- 自然排序:
-
线程安全场景
// 传统方案(不推荐) List<String> syncList = Collections.synchronizedList(new ArrayList<>()); // 现代方案(Java 5+) Map<String, String> concurrentMap = new ConcurrentHashMap<>();
五、最佳实践建议
-
初始化容量优化
// 预估元素数量避免扩容 new ArrayList<>(100); new HashMap<>(16, 0.75f); -
遍历方式选择
// EntrySet遍历Map(性能最优) for(Map.Entry<String, Integer> entry : map.entrySet()) { entry.getKey(); entry.getValue(); } -
不可变集合创建(Java 9+)
List<String> immutableList = List.of("A", "B", "C"); Set<Integer> immutableSet = Set.of(1, 2, 3);
注:本文未涵盖
Vector/Stack等遗留类,推荐使用ArrayList/ArrayDeque替代
掌握这些核心概念后,开发者可依据具体场景选择最合适的集合类型。下一步可深入学习迭代器模式、泛型擦除机制及Java 8引入的Stream API与集合的交互操作。
更多推荐
所有评论(0)