Java的集合与链表

Java 集合是 JDK 内置的一套容器类库,专门用来存储、管理和批量操作对象,解决了原生数组长度固定、功能单一的痛点,把常用的数据结构封装成了开箱即用的类,API 风格统一,是 Java 开发中最常用的工具之一。
核心分支与各自作用
集合框架主要分为四大体系,对应不同的业务场景:

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