杨斌
发布于 2026-04-17 / 4 阅读
0
0

Java中的集合类

Java 中的集合类(Java Collections Framework,JCF)是 Java 用来存储和操作一组对象的数据结构体系,主要位于:

java.util 包

它的核心可以分为两大体系:

  1. Collection 接口体系 → 存储单个元素

  2. Map 接口体系 → 存储键值对(key-value)


一、Java 集合框架总览图(结构图)

下面是 Java 集合体系的核心框架图:

Iterable
   │
Collection
├── List
│   ├── ArrayList
│   ├── LinkedList
│   └── Vector
│
├── Set
│   ├── HashSet
│   │   └── LinkedHashSet
│   └── TreeSet
│
└── Queue
    └── PriorityQueue

Map(独立体系)
      │
 ┌────┼──────────────┬──────────────┐
 │    │              │              │
HashMap LinkedHashMap TreeMap Hashtable

二、Collection 接口体系

Collection 是单列集合的根接口。

特点:

Collection<E>

常用方法:

add(E e)
remove(Object o)
contains(Object o)
size()
clear()
isEmpty()
iterator()

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

List 的特点:

✅ 元素有顺序
✅ 可以重复
✅ 可以通过索引访问


1. ArrayList

底层:

动态数组

特点:

  • 查询快

  • 随机访问快

  • 增删慢(中间位置)

示例:

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
System.out.println(list.get(0));

适用:

✅ 查询多
✅ 增删少


底层结构图

index:   0    1    2    3
       ┌────┬────┬────┬────┐
data = │ A  │ B  │ C  │ D  │
       └────┴────┴────┴────┘

2. LinkedList

底层:

双向链表

特点:

  • 插入快

  • 删除快

  • 查询慢

示意:

A <--> B <--> C <--> D

代码:

List<String> list = new LinkedList<>();
list.add("A");
list.add("B");

适用:

✅ 增删频繁


3. Vector

老版本线程安全集合。

特点:

  • 线程安全

  • 性能较低

Vector<String> vector = new Vector<>();

现在很少使用。


4. Stack

继承 Vector,栈结构:

先进后出(LIFO)
Stack<String> stack = new Stack<>();
stack.push("A");
stack.pop();

四、Set 集合(无序、不可重复)

特点:

✅ 不允许重复
❌ 没有索引


1. HashSet

底层:

HashMap

特点:

  • 无序

  • 去重

  • 查询快

Set<String> set = new HashSet<>();
set.add("A");
set.add("A"); // 不会重复

底层图

哈希表结构
桶(bucket) + 链表/红黑树
bucket[0] → null
bucket[1] → A → B
bucket[2] → C

2. LinkedHashSet

特点:

  • 去重

  • 保留插入顺序

Set<String> set = new LinkedHashSet<>();

3. TreeSet

底层:

红黑树

特点:

  • 自动排序

  • 不重复

Set<Integer> set = new TreeSet<>();
set.add(3);
set.add(1);
set.add(2);

输出:

1 2 3

五、Queue 队列集合

特点:

先进先出(FIFO)

1. PriorityQueue

优先级队列:

Queue<Integer> q = new PriorityQueue<>();

特点:

  • 自动排序

  • 优先级高先出


2. LinkedList 也可作队列

Queue<String> queue = new LinkedList<>();
queue.offer("A");
queue.poll();

六、Map 集合(键值对)

Map 不属于 Collection。

结构:

key -> value

1. HashMap(最常用)

特点:

✅ key唯一
✅ 无序
✅ 允许一个null key

Map<Integer,String> map = new HashMap<>();
map.put(1,"Tom");

底层(JDK8)

数组 + 链表 + 红黑树

结构:

table[0]
table[1] → Node → Node → TreeNode
table[2]

2. LinkedHashMap

特点:

  • 保持插入顺序

Map<Integer,String> map = new LinkedHashMap<>();

3. TreeMap

特点:

  • key 自动排序

Map<Integer,String> map = new TreeMap<>();

4. Hashtable

老版本线程安全:

Map<String,String> map = new Hashtable<>();

特点:

  • 线程安全

  • 不允许 null


七、各集合对比表

集合

底层结构

有序

可重复

线程安全

ArrayList

动态数组

LinkedList

双向链表

HashSet

HashMap

LinkedHashSet

哈希+链表

TreeSet

红黑树

排序

HashMap

哈希表

key不可重复

TreeMap

红黑树

排序

key不可重复


八、线程安全集合

Java 还提供并发集合:

集合

说明

ConcurrentHashMap

线程安全Map

CopyOnWriteArrayList

线程安全List

BlockingQueue

阻塞队列

例如:

Java Platform, Standard Edition 中的并发包:

java.util.concurrent

示例:

Map<String,String> map = new ConcurrentHashMap<>();

九、如何选择集合

一般选择原则:

查询多

ArrayList
HashMap

增删多

LinkedList

去重

HashSet

排序

TreeSet
TreeMap

线程安全

ConcurrentHashMap
CopyOnWriteArrayList

十、最常用的几个

实际开发最常用:

ArrayList
HashMap
HashSet
LinkedHashMap
ConcurrentHashMap


评论