资讯详情

Java集合容器超全总结(零基础吃透 List/Set/Map 核心原理)

📅 2026/9/23 10:19:16 | 华诺云谱 👁 阅读
Java集合容器超全总结(零基础吃透 List/Set/Map 核心原理)
前言Java集合容器是开发、面试、考试的核心重点很多同学学不会的根源分不清索引、有序、无序、去重原理、底层结构。本文一次性汇总List、Set、Map所有常用集合统一口径、统一记忆、彻底搞定集合所有易错点。一、先搞懂两个核心关键概念90%的坑都在这里1. 什么是索引索引就是集合元素的数字编号从 0 开始和数组下标完全一样。有索引的集合可以通过get(索引)、remove(索引)、set(索引,元素)精准操作元素。只有 List 系列有索引Set、Map 全部无索引没有 get(数字) 方法绝对不能通过下标取值。2. 什么是有序 / 无序最易混淆集合的有序、无序和索引无关只看「遍历顺序」分为两种存取有序遍历顺序 代码添加put/add的顺序排序有序遍历顺序 元素大小顺序和添加顺序无关无序遍历顺序随机不保证添加顺序终极避坑有序 ≠ 有索引LinkedHashSet、LinkedHashMap 是存取有序但是无索引不能 get(0)二、List 系列有索引、可重复核心特征✅ 有索引、✅ 元素可重复、✅ 存取有序、线程不安全除Vector1. ArrayList最常用底层动态扩容数组特点查询快、增删慢数组移位开销大线程不安全常用方法add / get / set / remove / size2. LinkedList底层双向链表特点首尾增删快、查询慢需要遍历查找线程不安全额外方法addFirst / addLast / pollFirst 等首尾操作3. Vector老旧淘汰底层数组线程安全方法加锁效率极低现状开发基本不用三、Set 系列无索引、不可重复核心特征❌ 无索引、❌ 元素不可重复、线程不安全1. HashSet底层HashMap哈希表数组链表红黑树有序性无序遍历顺序随机去重原理重写hashCode() equals()特点查询、增删效率极高2. LinkedHashSet底层LinkedHashMap哈希表 双向链表有序性存取有序遍历顺序添加顺序核心链表记录添加顺序哈希表负责去重注意有序但无索引3. TreeSet底层TreeMap红黑树有序性大小排序有序自动升序和添加顺序无关去重/排序原理依赖比较规则Comparable 接口 / Comparator 比较器注意自定义对象必须指定比较规则否则直接报错四、Map 系列键值对、无索引核心特征❌ 无索引、key唯一value可重复、线程不安全除Hashtable1. HashMap开发首选底层哈希表数组链表红黑树JDK1.8核心优化链表长度过长时转换红黑树提升查询效率有序性无序JDK8偶尔顺序一致是巧合不保证空值规则key允许一个nullvalue允许多个null去重key重复会覆盖旧value常用方法put / get / remove / containsKey / keySet / values / entrySet初始容量默认数组容量为16不会直接初始化大容量数组节省内存负载因子 扩容机制核心默认负载因子0.75当集合元素个数size 数组容量 × 0.75 时触发自动扩容每次扩容为原容量的2倍同时重新哈希分布所有元素链表树化规则JDK8必考当单个链表长度达到8且数组容量 ≥ 64链表自动转换为红黑树若数组容量64仅触发扩容不树化避免小容量数组浪费红黑树空间红黑树退化规则当红黑树节点数量减少至6个及以下自动退化为普通链表链表查询效率足够简化结构阈值区间说明链表长度7为临界缓冲区间既避免频繁树化、退化导致的性能抖动兼顾查询与结构稳定性红黑树五大核心特性面试必背1. 节点只有两种颜色红色、黑色2.根节点必须是黑色3. 所有叶子节点空叶子都是黑色4.红色节点的子节点一定是黑色不能出现连续红节点5. 任意节点到其所有叶子节点的路径包含的黑色节点数量相同黑高一致红黑树核心作用属于自平衡二叉查找树严格限制树的高度避免链表退化导致的查询效率暴跌保证增删查时间复杂度稳定在O(log n)2. LinkedHashMap底层哈希表 双向链表有序性存取有序遍历顺序put添加顺序空值规则支持null键、null值适用场景需要保留存储顺序的键值对数据3. TreeMap底层红黑树有序性key大小排序有序空值规则key不允许null排序规则key要么实现Comparable要么传入比较器4. Hashtable老旧淘汰线程安全效率低空值规则key、value都不能为null现状被HashMap彻底替代五、Set与Map底层对应关系必考Set 本质是阉割版 Map所有Set底层都依赖MapHashSet ➡ 底层 HashMapLinkedHashSet ➡ 底层 LinkedHashMapTreeSet ➡ 底层 TreeMap六、自定义对象去重核心规则高频考点将自定义对象如Person存入 HashSet / HashMap 实现去重必须同时重写 hashCode() 和 equals()参与equals比较的属性必须全部参与hashCode计算底层执行流程先比对hash值hash不同直接判定不同对象hash相同再比对equals七、终极汇总对照表直接背诵集合索引重复有序类型底层结构线程安全ArrayList有可重复存取有序数组不安全LinkedList有可重复存取有序双向链表不安全HashSet无不可重复无序哈希表不安全LinkedHashSet无不可重复存取有序哈希表双向链表不安全TreeSet无不可重复大小排序红黑树不安全HashMap无key唯一无序哈希表不安全LinkedHashMap无key唯一存取有序哈希表双向链表不安全TreeMap无key唯一大小排序红黑树不安全八、极简背诵口诀List有索引、可重复、存取有序Hash无序、哈希表、靠hashequals去重Linked加链表、记顺序、存取有序无索引Tree红黑树、自动排序、依赖比较规则
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。