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)

是