Java中的集合(Collection)是用于存储和操作一组对象的容器。Java集合框架(Java Collections Framework)提供了一套丰富的接口和类,用于处理不同类型的集合数据。

集合框架的层次结构

Java集合框架主要分为两大类:

  • Collection接口:表示一组对象的集合;

  • Map接口:表示键值对的映射。

Collection接口

  • List:有序且可重复的集合;

  • Set:无序且不可重复的集合;

  • Queue:队列,支持先进先出(FIFO)或优先级排序。

Map接口

  • Map表示键值对的映射,键不可重复。

常用集合类

List接口的实现类

  • ArrayList

    • 基于动态数组实现;

    • 支持快速随机访问;

    • 适合频繁查询的场景。

  • LinkedList

    • 基于双向链表实现;

    • 支持快速插入和删除;

    • 适合频繁修改的场景。

  • Vector

    • 类似于ArrayList,但是线程安全;

    • 性能较低,通常不推荐使用;

  • Stack

    • 继承自Vector,实现栈结构(后进先出,LIFO);

Set接口的实现类

  • HashSet

    • 基于哈希表实现;

    • 无序且不可重复;

    • 允许存储null值。

  • LinkedHashSet

    • 继承自HashSet,维护插入顺序。

  • TreeSet

    • 基于红黑树实现;

    • 元素按自然顺序或自定义顺序排序。

Queue接口的实现类

  • LinkedList

    • 可以用作队列或双端队列。

  • PriorityQueue

    • 基于优先级堆实现;

    • 元素按自然顺序或自定义顺序排序。

  • ArrayDeque

    • 基于动态数组实现的双端队列。

Map接口的实现类

  • HashMap

    • 基于哈希表实现;

    • 键值对无序;

    • 允许null键和null值。

  • LinkedHashMap

    • 继承自HashMap,维护插入顺序或访问顺序。

  • TreeMap

    • 基于红黑树实现;

    • 键按自然顺序或自定义顺序排序。

  • Hashtable

    • 类似于HashMap,但是线程安全;

    • 不允许null键和null值。

  • ConcurrentHashMap

    • 线程安全的HashMap,性能优于Hashtable

集合的常用操作

List操作

List<String> list = new ArrayList<>();
list.add("A"); // 添加元素
list.add("B");
list.get(0); // 获取元素
list.remove(1); // 删除元素
list.size(); // 获取大小

Set操作

Set<String> set = new HashSet<>();
set.add("A"); // 添加元素
set.add("B");
set.contains("A"); // 检查元素是否存在
set.remove("B"); // 删除元素
set.size(); // 获取大小

Queue操作

Queue<String> queue = new LinkedList<>();
queue.offer("A"); // 添加元素
queue.offer("B");
queue.poll(); // 移除并返回队首元素
queue.peek(); // 返回队首元素但不移除
queue.take(); // 阻塞读取
queue.put();  // 阻塞添加

Map操作

Map<String, Integer> map = new HashMap<>();
map.put("A", 1); // 添加键值对
map.put("B", 2);
map.get("A"); // 获取值
map.remove("B"); // 删除键值对
map.size(); // 获取大小

集合的性能比较

集合类

实现方式

查询性能

插入/删除性能

线程安全

ArrayList

动态数组

O(1)

O(n)

LinkedList

双向链表

O(n)

O(1)

HashSet

哈希表

O(1)

O(1)

TreeSet

红黑树

O(log n)

O(log n)

HashMap

哈希表

O(1)

O(1)

TreeMap

红黑树

O(log n)

O(log n)

ConcurrentHashMap

分段锁哈希表

O(1)

O(1)