Java 集合是 Java 面试中的 高频核心知识点,几乎所有 Java 面试都会问到,例如:

  • ArrayList 和 LinkedList 区别

  • HashMap 原理

  • HashMap 为什么线程不安全

  • HashMap 扩容机制

  • ConcurrentHashMap 原理

  • Set 和 List 区别

本文系统整理 Java集合框架 + 面试常问知识点


一、Java集合框架整体结构

Java 集合主要分为 两大体系

Collection(单列集合)
Map(双列集合)

整体结构:

                Collection
                   |
       --------------------------------
       |               |              |
      List            Set           Queue
       |
  ArrayList
  LinkedList
  Vector


Map
 |
 -------------------------
 |            |           |
HashMap     TreeMap   Hashtable
 |
LinkedHashMap
 |
ConcurrentHashMap

二、Collection 接口

Collection 是 所有单列集合的父接口

主要子接口:

List
Set
Queue

常用方法:

add()
remove()
size()
clear()
contains()
isEmpty()
iterator()

三、List 集合(有序、可重复)

List 的特点:

  • 有序

  • 可重复

  • 支持下标访问

常见实现类:

ArrayList
LinkedList
Vector

四、ArrayList 原理(面试重点)

ArrayList 是 最常用的集合

底层结构:

动态数组

源码核心:

transient Object[] elementData;

1 ArrayList 默认容量

new ArrayList()

初始容量:

0

第一次添加元素后:

10

2 ArrayList 扩容机制(重点)

扩容规则:

原容量 × 1.5

例如:

10 → 15 → 22 → 33

源码逻辑:

add()
 ↓
ensureCapacity()
 ↓
grow()
 ↓
Arrays.copyOf()

核心代码:

newCapacity = oldCapacity + (oldCapacity >> 1);

3 ArrayList 优缺点

优点:

  • 查询快(随机访问)

  • 内存连续

缺点:

  • 插入删除慢

  • 扩容有性能损耗


五、LinkedList 原理

LinkedList 底层是:

双向链表

结构:

Node{
    prev
    item
    next
}

LinkedList 特点

优点:

  • 插入快

  • 删除快

缺点:

  • 查询慢

因为需要遍历链表。


六、ArrayList 和 LinkedList 区别(高频面试题)

对比ArrayListLinkedList
底层结构动态数组双向链表
查询
插入删除
内存占用
线程安全不安全不安全

总结:

查询多用 ArrayList
增删多用 LinkedList

七、Vector(了解)

Vector 是 线程安全的 List

线程安全方式:

synchronized

例如:

public synchronized boolean add(E e)

缺点:

  • 性能低

因此现在基本被:

ArrayList

替代。


八、Set 集合(不允许重复)

Set 特点:

  • 无序

  • 不允许重复

常见实现类:

HashSet
LinkedHashSet
TreeSet

九、HashSet 原理

HashSet 底层其实是:

HashMap

源码:

private transient HashMap<E,Object> map;

存储结构:

value 固定为 Object

示例:

map.put(e,PRESENT);

HashSet 去重原理

核心依赖:

hashCode()
equals()

执行流程:

hashCode()
   ↓
判断桶位置
   ↓
equals()
   ↓
判断是否相同

因此如果想让对象去重:

必须重写:

equals()
hashCode()

十、TreeSet

TreeSet 底层:

红黑树

特点:

自动排序

例如:

TreeSet<Integer> set = new TreeSet<>();

排序方式:

1️⃣ 自然排序

2️⃣ Comparator 排序


十一、Map 集合

Map 是 键值对集合

key → value

特点:

  • key 不可重复

  • value 可以重复

常见实现类:

HashMap
LinkedHashMap
TreeMap
Hashtable
ConcurrentHashMap

十二、HashMap 原理(面试重点)

HashMap 是面试 最重要集合

底层结构:

数组 + 链表 + 红黑树

结构:

Node<K,V>[]

JDK1.8 之后:

数组 + 链表 + 红黑树

十三、HashMap 存储流程

执行:

put(key,value)

流程:

key.hashCode()
     ↓
数组下标
     ↓
判断是否冲突
     ↓
链表 / 红黑树

十四、HashMap 为什么是 2 的幂

HashMap 默认容量:

16

原因:

为了提高 哈希计算效率

计算数组位置:

index = (n-1) & hash

% 运算更快。


十五、HashMap 扩容机制

默认容量:

16

负载因子:

0.75

扩容条件:

size > capacity × loadFactor

例如:

16 × 0.75 = 12

当元素超过 12 就会扩容。

扩容规则:

容量 × 2

十六、HashMap 什么时候变成红黑树

JDK1.8 之后优化。

当链表长度:

≥ 8

会转换成:

红黑树

当长度:

≤ 6

又会退化成:

链表

这样可以提高查询效率。


十七、HashMap 为什么线程不安全

在多线程情况下:

resize()

可能导致:

死循环
数据丢失

因此 HashMap 不是线程安全


十八、ConcurrentHashMap(高频)

为了解决 HashMap 线程安全问题。

JDK1.7:

Segment + HashEntry

分段锁。


JDK1.8:

CAS + synchronized

锁粒度更小。

因此性能更高。


十九、HashMap vs Hashtable

对比HashMapHashtable
线程安全不安全安全
性能
null允许不允许

二十、Collections 工具类

Collections 是集合工具类。

常见方法:

排序:

Collections.sort(list);

最大值:

Collections.max(list);

最小值:

Collections.min(list);

反转:

Collections.reverse(list);

二十一、Iterator 迭代器

Iterator 用于遍历集合。

示例:

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

while(it.hasNext()){
    System.out.println(it.next());
}

二十二、Java集合线程安全方案

常见方式:

1️⃣ Vector

2️⃣ Collections.synchronizedList()

List list = Collections.synchronizedList(new ArrayList());

3️⃣ ConcurrentHashMap

推荐使用:

ConcurrentHashMap

二十三、Java集合常见面试题总结

高频问题:

1️⃣ ArrayList 和 LinkedList 区别
2️⃣ ArrayList 扩容机制
3️⃣ HashMap 原理
4️⃣ HashMap 为什么线程不安全
5️⃣ HashMap 扩容机制
6️⃣ HashMap 为什么容量是 2 的幂
7️⃣ HashSet 去重原理
8️⃣ ConcurrentHashMap 原理
9️⃣ TreeSet 底层结构
🔟 HashMap JDK1.7 和 1.8 区别


总结

Java 集合框架核心知识:

List
Set
Map

重点掌握:

ArrayList
LinkedList
HashMap
HashSet
ConcurrentHashMap

因为这些几乎是 Java 面试必问知识点

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐