2026.5.30休息一天

啥也没干,电脑也没打开,看了一天浪姐,明天早上努力努力。准备秋招第20天。

这里系统梳理 Java 集合 核心知识点,分架构、常用类、方法、区别、面试考点,由浅入深,方便学习和背诵。

一、集合整体架构

Java 集合分为两大顶层接口:Collection(单列集合)、Map(双列集合,键值对)

集合框架全部位于 java.util 包下,线程不安全(除 Vector、HashTable)。

plaintext

java.util

├─ Collection 单列集合(存单个对象)

│ ├─ List 有序、可重复、有索引

│ │ ├─ ArrayList

│ │ ├─ LinkedList

│ │ └─ Vector(老旧,线程安全)

│ ├─ Set 无序、不可重复、无索引

│ │ ├─ HashSet

│ │ ├─ LinkedHashSet

│ │ └─ TreeSet

│ └─ Queue/Deque 队列/双端队列

│ ├─ LinkedList

│ └─ ArrayDeque

└─ Map 双列集合(key-value 键值对)

├─ HashMap

├─ LinkedHashMap

├─ TreeMap

└─ HashTable(老旧,线程安全)

二、Collection 通用方法(所有单列集合都能用)

不管 List/Set/Queue,都继承这些核心方法:

java

boolean add(E e); // 添加单个元素

boolean remove(Object o); // 删除指定元素

boolean contains(Object o);// 判断是否包含元素

int size(); // 获取集合长度

boolean isEmpty(); // 判断是否为空

void clear(); // 清空集合

Object\[\] toArray(); // 转数组

Iterator<E> iterator(); // 获取迭代器(遍历)

单列集合三种遍历方式

  1. 普通 for 循环(仅 List 有索引可用)

  2. 增强 for 循环(foreach,所有 Collection 通用)

  3. 迭代器 Iterator(集合标准遍历,可遍历中删除元素)

示例:

java

ArrayList<String> list = new ArrayList<>();

list.add("A");

list.add("B");

// 1. 增强for

for (String s : list) {

System.out.println(s);

}

// 2. 迭代器

Iterator<String> it = list.iterator();

while(it.hasNext()){

String s = it.next();

// it.remove(); // 安全删除元素

}

三、List 接口(有序、可重复、带索引)

  1. ArrayList
  • 底层:动态扩容数组

  • 特点:查询、修改速度极快;中间位置增删慢(需要移动元素)

  • 初始容量:10;扩容规则:原容量 1.5倍

  • 线程不安全,适合查询多、增删少场景

常用独有方法(索引操作):

java

get(int index); // 根据索引获取元素

set(int index,E e);// 根据索引修改

add(int index,E e);// 指定位置插入

remove(int index); // 根据索引删除

  1. LinkedList
  • 底层:双向链表

  • 特点:首尾增删速度极快;随机查询慢

  • 同时实现 List + Deque ,可当列表、队列、栈使用

首尾操作方法:

java

addFirst(E e);

addLast(E e);

getFirst();

getLast();

removeFirst();

removeLast();

  1. Vector
  • 底层:数组,和 ArrayList 类似

  • 区别:线程安全(所有方法加锁),效率极低,项目基本废弃不用

List 三者对比速记

  • 日常开发首选:ArrayList

  • 频繁首尾增删、做队列/栈:LinkedList

  • 放弃使用:Vector

四、Set 接口(无序、元素唯一、无索引)

去重原理:依赖 hashCode() + equals() 两个方法判断元素是否重复。

自定义对象存 Set,必须重写 hashCode 和 equals,否则去重失效。

  1. HashSet
  • 底层:HashMap(哈希表:数组+链表+红黑树 JDK1.8)

  • 特点:无序、去重、查询效率高

  • 元素存取顺序和添加顺序不一致

  1. LinkedHashSet
  • 底层:LinkedHashMap(哈希表 + 双向链表)

  • 特点:有序(保留插入顺序)、去重;性能略低于 HashSet

  1. TreeSet
  • 底层:TreeMap(红黑树)

  • 特点:自动自然排序、去重、无序(不保留插入顺序)

  • 要求元素:

  1. 基本类型包装类:默认按大小排序

  2. 自定义对象:必须实现 Comparable 接口,或传入比较器 Comparator

Set 选型

  • 只去重、不关心顺序:HashSet

  • 去重 + 保留插入顺序:LinkedHashSet

  • 去重 + 自动排序:TreeSet

五、Queue & Deque 队列、双端队列

  1. Queue 队列(先进先出 FIFO)

常用方法(分两组,一组抛异常、一组返回 null)

功能 抛异常 返回特殊值

入队 add() offer()

出队 remove() poll()

查看队首 element() peek()

开发推荐使用: offer / poll / peek ,避免空集合抛出异常。

  1. Deque 双端队列

Queue 的子接口,两端都可以增删,兼顾队列、栈功能。

实现类

  1. ArrayDeque
  • 底层:循环数组,性能最强

  • 不能存储 null ,栈、队列首选,替代老旧 Stack 类

  1. LinkedList
  • 底层:双向链表,功能全,允许存 null

栈用法(后进先出 LIFO)

java

Deque<Integer> stack = new ArrayDeque<>();

stack.push(1); // 压栈

stack.pop(); // 弹栈

stack.peek(); // 取栈顶

六、Map 接口(键值对 key-value,key 唯一)

特点:key 不允许重复,value 可重复;无索引。

  1. HashMap(使用最多)
  • 底层:哈希表(数组+链表+红黑树)

  • JDK1.8 优化:链表长度 ≥8 且数组容量≥64,转为红黑树;链表长度≤6 退化为链表

  • 初始容量 16,扩容:2倍

  • 无序、线程不安全,查询/增删效率极高

  1. LinkedHashMap
  • 底层:哈希表 + 双向链表

  • 保留插入顺序;可实现 LRU 最近最少使用缓存

  1. TreeMap
  • 底层:红黑树

  • 按键自动排序

  1. HashTable
  • 老旧类,线程安全,效率低;不推荐使用

  • 区别:HashMap 允许 null 键值,HashTable 不允许

Map 通用方法

java

put(K key,V value); // 添加/修改键值对

get(Object key); // 根据key获取value

remove(Object key); // 根据key删除

containsKey(Object key); // 判断是否包含指定key

containsValue(Object v); // 判断是否包含指定value

keySet(); // 获取所有key集合

entrySet(); // 获取所有键值对(高效遍历)

Map 两种遍历方式

java

HashMap<String,Integer> map = new HashMap<>();

// 1. 遍历 key,再取 value

for (String key : map.keySet()) {

System.out.println(key + "=" + map.get(key));

}

// 2. 遍历键值对(推荐,效率更高)

for (Map.Entry<String,Integer> entry : map.entrySet()) {

System.out.println(entry.getKey() + "=" + entry.getValue());

}

Map 选型

  • 普通键值对,不关心顺序:HashMap

  • 要保留插入顺序:LinkedHashMap

  • 要求 key 自动排序:TreeMap

七、高频核心区别(面试必背)

  1. ArrayList vs LinkedList

  2. 底层:数组 / 双向链表

  3. 查询改:ArrayList 快;增删(首尾除外):LinkedList 快

  4. 内存:ArrayList 连续空间;LinkedList 节点分散,额外存引用

  5. HashMap vs HashTable

  6. 线程安全:HashMap 不安全;HashTable 安全

  7. null 值:HashMap 允许一个 null key、多个 null value;HashTable 不允许

  8. 迭代器:HashMap 快速失败;HashTable 枚举器

  9. ArrayDeque vs LinkedList(做栈/队列)

  10. 底层:循环数组 / 双向链表

  11. 性能:ArrayDeque 更快,数组寻址优于链表

  12. 限制:ArrayDeque 不能存 null;LinkedList 可以

  13. HashSet 去重原理

添加元素时:

  1. 先调用 hashCode() 计算哈希值,确定存放位置

  2. 位置已有元素,再调用 equals() 比较内容

  3. 两个方法都返回 true → 判定重复,不存入

八、补充工具类 & 并发集合

  1. Collections:集合工具类(静态方法)

java

Collections.sort(list); // 排序

Collections.shuffle(list); // 打乱顺序

Collections.synchronizedList(list); // 转成线程安全集合

  1. 并发场景(多线程)

单线程用上面普通集合;多线程推荐:

  • CopyOnWriteArrayList 替代 ArrayList

  • ConcurrentHashMap 替代 HashMap(主流)

九、学习路线总结(刷题/面试顺序)

  1. 先掌握 List:ArrayList、LinkedList(索引、增删改查、遍历)

  2. 再学 Queue/Deque:ArrayDeque、LinkedList 实现栈和队列

3

相关推荐
公众号-老炮说Java1 小时前
Spring AI Alibaba 硬核实战:Token 原理 → RAG → 多智能体,一篇通
java·人工智能·后端·spring
Kurisu5751 小时前
深度解析:Java 对象的内存布局与指针压缩原理
java·开发语言
garmin Chen1 小时前
Elasticsearch(2):JavaRestClient操作Elasticsearch全流程实战指南
java·大数据·elasticsearch·搜索引擎
zoyation1 小时前
Spring Boot多数据源
java·spring boot·后端
i220818 Faiz Ul1 小时前
在线预约导游|基于SSM+vue的在线预约导游系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·在线预约导游系统
右耳朵猫AI2 小时前
Java & JVM技术周刊 2026年第19周
java·开发语言·jvm
1candobetter2 小时前
单接口性能测试实践总结:压测方案设计、成功判定与 JVM 监控分析
java·jvm·压力测试·测试
han_hanker2 小时前
Java 对象序列化
java·开发语言
四代水门2 小时前
服务端倒带(Server-Side Rewind)命中判定系统
java·前端·算法