Java 集合是 JDK 内置的一套容器类库,专门用来存储、管理和批量操作对象,解决了原生数组长度固定、功能单一的痛点,把常用的数据结构封装成了开箱即用的类,API 风格统一,是 Java 开发中最常用的工具之一。
核心分支与各自作用
集合框架主要分为四大体系,对应不同的业务场景:
- List(有序列表,元素可重复)
特点:元素按插入顺序保存,支持通过下标访问,允许重复元素。
ArrayList:底层是动态数组,随机查询快、中间增删慢。是日常开发最常用的列表,适合以遍历、查询为主的场景,比如存储搜索记录、学生列表。
LinkedList:底层是双向链表,头尾增删极快、随机查询慢。适合频繁插入 / 删除首尾的场景,也可以直接当作队列、栈来使用。
Vector:线程安全的动态数组,性能较差,现在基本不用。 - Set(无序集合,元素不可重复)
特点:自动去重,不保证元素顺序,不支持下标访问。
HashSet:底层基于哈希表,去重和查询速度极快。适合对数据去重、判断元素是否存在的场景,比如统计不重复的关键词数量。
TreeSet:底层红黑树,可对元素自动排序,适合需要按自然顺序输出的去重场景。
LinkedHashSet:哈希表 + 链表,可保留元素插入顺序。 - Map(键值对映射,Key 唯一)
特点:以「Key-Value」形式存储数据,通过 Key 快速查找 Value,Key 不允许重复。
HashMap:底层哈希表,存取速度最快。是最常用的键值对容器,适合统计计数、快速查找,比如你之前做的热搜词频次统计。
LinkedHashMap:在 HashMap 基础上增加双向链表,可保留插入顺序或访问顺序。典型应用就是你之前写的 LRU 缓存,依靠它实现「最近最少使用」淘汰策略。
TreeMap:底层红黑树,可对 Key 自动排序,适合需要按 key 排序输出的场景。 - Queue / Deque(队列 / 双端队列)
特点:专门用于「排队」类场景,遵循先进先出(队列)或后进先出(栈)规则。
典型实现是 LinkedList 和 ArrayDeque,常用于任务调度、广度优先搜索、撤销回退等场景。
链表的作用(数据结构 + Java 实现)
链表是一种经典的线性数据结构,数据存储在一个个「节点」中,每个节点除了存数据,还存着指向下一个(或上一个)节点的指针,节点在内存中不需要连续存储。
常见类型:
单向链表:节点只存后继指针,只能从头到尾遍历
双向链表:节点同时存前驱 + 后继指针,可双向遍历(Java 的 LinkedList 就是双向链表)
链表的核心作用与优势:
动态伸缩,无空间浪费
不需要像数组一样提前指定容量,需要多少节点就创建多少,不会有预留空间的浪费,适合数据量不确定、频繁增减的场景。
高效的节点增删
在已知目标节点位置的前提下,增删节点只需要修改相邻节点的指针,不需要像数组一样移动大量后续元素,时间复杂度为 O (1)。
适合需要频繁插入、删除元素的场景,比如实时榜单更新、任务队列插队。
支撑多种高级数据结构
链表是很多复杂结构的底层基础:
队列、栈、双端队列
哈希表的「拉链法」解决哈希冲突
LRU 缓存的访问顺序维护
邻接表实现图结构
链表的局限性
不支持随机访问:查询某个位置的元素必须从头遍历,时间复杂度 O (n),查询效率远低于数组。
额外内存开销:每个节点都要额外存储指针,相同数据量下比数组更占内存。
浙公网安备 33010602011771号