javase学习day4:Java 中的 “集合” 到底是什么?
·
先阅读Java 集合框架 | 菜鸟教程
https://www.runoob.com/java/java-collections.html
写的非常好,看完再来看这篇
一、先搞懂:Java 中的 “集合” 到底是什么?
1. 集合的核心定义
集合(Collection)是 Java 提供的一组用于存储多个对象的容器,本质是 “存放数据的盒子”,和你熟悉的数组功能类似,但功能更强大、使用更灵活。
2. 为什么需要集合?(对比数组)
你已经学过数组(int[]/String[]),数组的缺点就是集合的优势:
| 特性 | 数组 | 集合 |
|---|---|---|
| 长度 | 固定不变(创建时指定,无法扩容) | 动态可变(自动扩容,无需关心长度) |
| 存储类型 | 只能存同一类型的元素(且基本类型 / 引用类型二选一) | 可存任意引用类型(泛型限定后更安全) |
| 功能 | 仅支持简单的增删(需手动移动元素),无现成方法 | 内置大量实用方法(排序、查找、去重、遍历) |
| 适用场景 | 元素数量固定、类型单一的简单场景 | 元素数量动态变化、需要复杂操作的场景 |
生活化例子:
- 数组就像 “固定容量的抽屉”:买的时候就定了能放 10 件东西,放满了就塞不进去,想拿中间的东西还得把前面的都挪开;
- 集合就像 “可伸缩的收纳箱”:能自动变大,内置了 “分类”“查找”“删除” 的功能,想拿东西直接说 “找红色的杯子” 就行,不用自己翻。
3. 集合的核心特点
- 只能存储引用类型(如 Integer、String、自定义对象),不能直接存基本类型(int、char 等,需用包装类如 Integer 替代);
- 支持动态扩容(如 ArrayList 默认初始容量 10,满了自动扩容 1.5 倍);
- 提供丰富的操作方法(add/remove/contains/sort 等),无需自己手写逻辑;
- 集合框架是一套完整的体系,不同集合有不同特性,适配不同场景。
二、Java 集合的整体架构(核心骨架)
Java 集合框架(Java Collections Framework,JCF)主要分为两大分支,所有集合类都基于这两个顶级接口:
Java集合框架
├─ Collection接口(存储单个元素的集合)
│ ├─ List接口(有序、可重复)
│ │ ├─ ArrayList(动态数组,查询快)
│ │ ├─ LinkedList(双向链表,增删快)
│ │ └─ Vector(线程安全的动态数组,性能差)
│ ├─ Set接口(无序、不可重复)
│ │ ├─ HashSet(哈希表实现,查找快)
│ │ ├─ LinkedHashSet(有序的HashSet)
│ │ └─ TreeSet(有序的Set,按自然顺序排序)
│ └─ Queue接口(队列,先进先出FIFO)
│ ├─ LinkedList(也实现了Queue)
│ └─ PriorityQueue(优先级队列)
└─ Map接口(存储键值对<K,V>的集合)
├─ HashMap(哈希表实现,查询快)
├─ LinkedHashMap(有序的HashMap)
├─ TreeMap(有序的Map,按键排序)
└─ Hashtable(线程安全的HashMap,性能差)
核心分支说明:
1. Collection 接口(单元素集合)
存储 “单个元素” 的集合,比如List<String>存的是一个个 String,Set<Integer>存的是一个个 Integer。
- List:有序、可重复(按插入顺序存储,能存多个相同元素);
- Set:无序、不可重复(元素唯一,无索引);
- Queue:队列,遵循 “先进先出”(FIFO),比如排队买票,先到先得。
2. Map 接口(键值对集合)
存储 “键值对(Key-Value)” 的集合,比如HashMap<String, Integer>可以存{"张三":18, "李四":20},通过 “键”(张三)快速找到 “值”(18)。
- 键(Key):唯一,不能重复;
- 值(Value):可以重复;
- 核心特点:通过键快速查找值(时间复杂度接近 O (1))。
三、集合的核心分类(新手必掌握的 4 个核心集合)
作为新手,不用学所有集合,先掌握这 4 个最常用的,就能覆盖 90% 的开发场景:
1. ArrayList(List 接口)
- 底层结构:动态数组;
- 核心特性:有序、可重复、支持索引访问;
- 优势:查询(get)、遍历速度快;
- 劣势:中间位置增删(add/remove)速度慢(需移动数组元素);
- 适用场景:查询多、增删少的场景(如展示列表数据)。
2. LinkedList(List+Queue 接口)
- 底层结构:双向链表;
- 核心特性:有序、可重复、支持索引(但索引访问慢);
- 优势:首尾增删(addFirst/addLast)速度快;
- 劣势:查询速度慢(需从头 / 尾遍历找元素);
- 适用场景:增删多、查询少的场景(如队列、栈)。
3. HashSet(Set 接口)
- 底层结构:哈希表;
- 核心特性:无序、不可重复、无索引;
- 优势:添加、删除、查找速度极快;
- 劣势:无序,无法按索引访问;
- 适用场景:需要去重、快速查找的场景(如存储用户 ID,避免重复)。
4. HashMap(Map 接口)
- 底层结构:哈希表;
- 核心特性:键唯一、值可重复、无序;
- 优势:通过键快速查找值;
- 劣势:无序,键不能重复;
- 适用场景:需要键值对映射的场景(如存储用户信息:ID→用户对象)。
四、集合的核心使用原则(新手避坑)
1. 优先用接口声明,实现类实例化(面向接口编程)
2. 用泛型限定元素类型(避免类型不安全)
3. 遍历集合的选择
- List 集合:
- 仅遍历 → 增强 for 循环;
- 遍历中删除 → Iterator;
- 按索引操作 → 普通 for 循环;
- Set 集合:只能用增强 for 循环 / Iterator(无索引);
- Map 集合:遍历键、值或键值对:
五、集合的核心思想:“合适的场景用合适的集合”
新手最容易犯的错:不管什么场景都用 ArrayList。其实不同集合有不同的设计目标,比如:
- 想存 “有序、可重复” 的数据,且经常查询 → ArrayList;
- 想存 “有序、可重复” 的数据,且经常增删 → LinkedList;
- 想存 “不重复” 的数据,且快速查找 → HashSet;
- 想存 “键值对”,通过键找值 → HashMap。
生活化例子:
- ArrayList = 书架(按顺序摆书,找指定位置的书快,插一本书到中间慢);
- LinkedList = 项链(增删珠子快,找第 10 颗珠子慢);
- HashSet = 无编号的储物柜(存东西快,找东西快,但不能按顺序找);
- HashMap = 字典(按拼音 / 部首(键)找字(值),速度极快)。
总结
- 集合的本质:Java 提供的 “动态存储多个对象的容器”,解决数组长度固定、功能单一的问题;
- 核心分类:
- Collection(单元素):List(有序可重复)、Set(无序不可重复);
- Map(键值对):键唯一、值可重复,通过键快速找值;
- 新手必掌握:ArrayList(查询快)、LinkedList(增删快)、HashSet(去重)、HashMap(键值对);
- 核心原则:面向接口编程(接口声明 + 实现类实例化)、用泛型限定类型、合适场景选合适集合。
更多推荐

所有评论(0)