JavaSE核心知识点03高级特性03-01(集合框架)
🤟致敬读者
- 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉
📘博主相关
- 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息
文章目录
- JavaSE核心知识点03高级特性03-01(集合框架)
- 一、什么是集合框架(Collection Framework)?
- 为什么需要集合框架?
- 二、集合框架的核心结构
- 1. **Collection 接口(单列集合)**
- 2. **Map 接口(双列集合)**
- 三、核心接口详解与代码示例
- 1. **List 接口**
- 特点:有序、可重复、可通过索引访问
- 2. **Set 接口**
- 特点:无序、不可重复(通过`equals()`和`hashCode()`判断)
- 3. **Map 接口**
- 特点:键值对存储,Key唯一
- 四、集合框架的通用操作
- 1. **遍历集合**
- 2. **集合工具类 `Collections`**
- 五、如何选择集合类?
- 六、常见面试问题
- 七、学习路线建议
📃文章前言
- 🔷文章均为学习工作中整理的笔记。
- 🔶如有错误请指正,共同学习进步。
JavaSE核心知识点03高级特性03-01(集合框架)
作为Java集合框架的入门学习指南,我将从基础概念、核心接口、常用实现类、使用场景到代码示例,逐步为你讲解。内容会尽量通俗易懂,配有代码示例和对比表格,帮助你快速掌握。
一、什么是集合框架(Collection Framework)?
集合框架 是Java中用于存储和操作一组对象的统一架构。它提供了一套标准化的接口和实现类,解决了数组的局限性(如固定长度、类型单一、操作复杂等)。
为什么需要集合框架?
- 动态扩容:无需手动管理容量
- 类型安全:通过泛型确保数据类型一致
- 高性能操作:提供丰富的API(增删改查、排序、遍历等)
- 统一标准:所有集合类遵循相同的接口规范
二、集合框架的核心结构
Java集合框架主要分为两大类:单列集合(Collection) 和 双列集合(Map)。
1. Collection 接口(单列集合)
- List:有序、可重复
- 常用实现类:
ArrayList
,LinkedList
,Vector
- 常用实现类:
- Set:无序、不可重复
- 常用实现类:
HashSet
,LinkedHashSet
,TreeSet
- 常用实现类:
- Queue:队列,先进先出(FIFO)
- 常用实现类:
LinkedList
,PriorityQueue
- 常用实现类:
2. Map 接口(双列集合)
- 键值对(Key-Value)存储,Key不可重复
- 常用实现类:
HashMap
,LinkedHashMap
,TreeMap
,Hashtable
三、核心接口详解与代码示例
1. List 接口
特点:有序、可重复、可通过索引访问
常用实现类对比:
实现类 | 数据结构 | 特点 |
---|---|---|
ArrayList | 动态数组 | 查询快,增删慢(需扩容或移动元素) |
LinkedList | 双向链表 | 增删快,查询慢(需遍历节点) |
Vector | 同步的动态数组 | 线程安全,性能较低(已逐渐被淘汰) |
示例代码:
// ArrayList示例
List<String> arrayList = new ArrayList<>();
arrayList.add("Apple");
arrayList.add("Banana");
arrayList.add(1, "Orange"); // 在索引1插入元素
System.out.println(arrayList); // [Apple, Orange, Banana]// LinkedList示例
List<Integer> linkedList = new LinkedList<>();
linkedList.add(10);
linkedList.addFirst(5); // 头部插入
linkedList.addLast(20); // 尾部插入
System.out.println(linkedList.get(1)); // 10
2. Set 接口
特点:无序、不可重复(通过equals()
和hashCode()
判断)
常用实现类对比:
实现类 | 数据结构 | 特点 |
---|---|---|
HashSet | 哈希表 | 最快查询,无顺序 |
LinkedHashSet | 哈希表+链表 | 保留插入顺序 |
TreeSet | 红黑树 | 自然排序或自定义排序 |
示例代码:
// HashSet示例
Set<String> hashSet = new HashSet<>();
hashSet.add("Java");
hashSet.add("Python");
hashSet.add("Java"); // 重复元素不会被添加
System.out.println(hashSet); // 输出顺序不确定,如 [Java, Python]// TreeSet示例(自然排序)
Set<Integer> treeSet = new TreeSet<>();
treeSet.add(5);
treeSet.add(2);
treeSet.add(8);
System.out.println(treeSet); // [2, 5, 8]
3. Map 接口
特点:键值对存储,Key唯一
常用实现类对比:
实现类 | 数据结构 | 特点 |
---|---|---|
HashMap | 哈希表 | 最快查询,无顺序(允许null键值) |
LinkedHashMap | 哈希表+链表 | 保留插入顺序或访问顺序 |
TreeMap | 红黑树 | 按键自然排序或自定义排序 |
Hashtable | 哈希表 | 线程安全,不允许null键值(已过时) |
示例代码:
// HashMap示例
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Alice", 25);
hashMap.put("Bob", 30);
hashMap.put("Alice", 26); // 覆盖原有值
System.out.println(hashMap.get("Bob")); // 30// TreeMap示例(按键排序)
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Orange", 5);
treeMap.put("Apple", 3);
System.out.println(treeMap); // {Apple=3, Orange=5}
四、集合框架的通用操作
1. 遍历集合
-
for-each循环(推荐):
List<String> list = Arrays.asList("A", "B", "C"); for (String s : list) {System.out.println(s); }
-
迭代器(Iterator):
Iterator<String> it = list.iterator(); while(it.hasNext()) {String s = it.next();if (s.equals("B")) it.remove(); // 安全删除元素 }
2. 集合工具类 Collections
提供静态方法操作集合:
List<Integer> numbers = new ArrayList<>(Arrays.asList(3,1,4,2));
Collections.sort(numbers); // 排序 → [1,2,3,4]
Collections.reverse(numbers); // 反转 → [4,3,2,1]
Collections.shuffle(numbers); // 随机打乱
五、如何选择集合类?
根据需求选择最合适的集合:
场景 | 推荐实现类 |
---|---|
快速随机访问 | ArrayList |
频繁插入删除 | LinkedList |
去重且无需排序 | HashSet |
去重且保留插入顺序 | LinkedHashSet |
需要排序 | TreeSet 或 TreeMap |
键值对存储 | HashMap (最常用) |
线程安全场景 | ConcurrentHashMap |
六、常见面试问题
-
ArrayList和LinkedList的区别?
ArrayList
基于动态数组,适合随机访问;LinkedList
基于链表,适合频繁增删。
-
HashMap的工作原理?
- 通过哈希函数计算键的哈希值,存储到对应桶(数组位置),解决哈希冲突使用链表或红黑树(JDK8+)。
-
如何保证集合的线程安全?
- 使用
Collections.synchronizedList()
包装,或选择ConcurrentHashMap
、CopyOnWriteArrayList
等并发集合。
- 使用
七、学习路线建议
- 基础阶段:掌握
ArrayList
、HashMap
、HashSet
的常用操作 - 进阶阶段:理解底层数据结构(如哈希表、红黑树)、泛型、迭代器
- 高级阶段:学习线程安全集合、性能优化、
Stream API
操作集合
练习建议:
- 实现一个简单的学生管理系统(用集合存储学生信息)
- 统计一篇文章中每个单词出现的次数(用
HashMap
) - 比较不同集合在10万次操作下的性能差异
如果有具体问题或需要更多代码示例,欢迎随时提问!
📜文末寄语
- 🟠关注我,获取更多内容。
- 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
- 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
- 🔵加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
- 🟣点击下方名片获取更多内容🍭🍭🍭👇