Java集合框架常用API有哪些?List、Set、Map方法大全
作者:碎碎念...
前言
1. 本文主要介绍 Java 标准库中 java.util 包下的集合框架,不涉及 java.util.concurrent(JUC)包中的并发集合类。
2. 文章侧重于常用集合类及其常用 API 的整理与总结,旨在为日常开发提供查阅参考,不涉及底层原理或面试相关问题的深入探讨。
集合框架概述

图 1:Java 集合框架结构图(图源自 Java Guide)
Java 中的集合(也称为容器)框架主要由两大核心接口组成:
- Collection 接口:用于存储单个元素的集合,常见的子接口包括
List、Set和Queue; - Map 接口:用于存储键值对形式的数据。
其中,Collection 是最基础的集合接口,根据元素的组织方式又衍生出以下三种常用子接口:
List
- 元素有序、可重复,支持通过索引访问。
- 常见实现类:
ArrayList、LinkedList、Vector。
Set
- 元素无序、不可重复,适用于去重场景。
- 常见实现类:
HashSet、LinkedHashSet、TreeSet。 - 派生子接口:
SortedSet(如TreeSet),用于提供有序集合支持。
Queue
- 用于队列结构,强调元素的处理顺序。
- 常见实现类:
LinkedList、PriorityQueue、ArrayDeque。 - 派生子接口:
Deque(双端队列接口),支持从两端插入和删除元素。
而 Map 接口则用于保存键值对(key-value)结构的数据:
- 常见实现类:
HashMap、LinkedHashMap、TreeMap、Hashtable。 - 派生子接口:
SortedMap(如TreeMap),用于维护键的有序性。
注:集合框架中的一些接口(如 SortedSet、Deque、SortedMap)并不常在项目中直接使用,但它们是一些重要实现类(如 TreeSet、ArrayDeque、TreeMap)的核心接口,理解这些结构有助于掌握集合的使用与底层行为。
List 接口常用 API
List 接口表示有序、可重复的元素集合,支持通过索引访问元素。
常见实现类有:
ArrayList:基于动态数组实现,支持快速随机访问,但在数组中间插入或删除元素时性能较差。LinkedList:基于双向链表实现,在两端插入和删除元素较快,但随机访问元素需要从头或尾遍历,性能较低。
常用方法汇总
| 方法名 | 说明 | 返回值 | 时间复杂度 |
|---|---|---|---|
| add(E e) | 向列表尾部添加元素 | boolean | ArrayList: O(1) 均摊;LinkedList: O(1) |
| add(int index, E e) | 在指定位置插入元素 | void | O(n) |
| get(int index) | 获取指定索引位置的元素 | E | ArrayList: O(1);LinkedList: O(n) |
| set(int index, E e) | 替换指定索引位置的元素 | E | ArrayList: O(1);LinkedList: O(n) |
| remove(int index) | 移除指定索引处的元素 | E | O(n) |
| remove(Object o) | 移除首次出现的指定元素 | boolean | O(n) |
| contains(Object o) | 判断是否包含指定元素 | boolean | O(n) |
| indexOf(Object o) | 返回首次出现的索引 | int | O(n) |
| lastIndexOf(Object o) | 返回最后一次出现的索引 | int | O(n) |
| size() | 返回列表中的元素个数 | int | O(1) |
| isEmpty() | 判断列表是否为空 | boolean | O(1) |
| clear() | 清空所有元素 | void | O(n) |
| toArray() | 转为数组 | Object[] | O(n) |
Set 接口常用 API
Set 接口表示不允许包含重复元素的集合,主要用于保证元素的唯一性。
常见实现类有:
HashSet:基于哈希表实现,支持快速插入、删除和查找,元素无序。LinkedHashSet:继承自 HashSet,使用链表维护元素插入顺序,迭代顺序稳定。TreeSet:基于红黑树实现,元素有序,支持排序操作。
常用方法汇总
| 方法名 | 说明 | 返回值 | 时间复杂度 |
|---|---|---|---|
| add(E e) | 添加元素 | boolean | O(1) 均摊 |
| remove(Object o) | 移除指定元素 | boolean | O(1) 均摊 |
| contains(Object o) | 判断是否包含指定元素 | boolean | O(1) 均摊 |
| size() | 返回集合中的元素个数 | int | O(1) |
| isEmpty() | 判断集合是否为空 | boolean | O(1) |
| clear() | 清空所有元素 | void | O(n) |
| iterator() | 返回迭代器 | Iterator<E> | O(1) |
| toArray() | 转为数组 | Object[] | O(n) |
注:TreeSet 也是 Set 接口的实现类,时间复杂度的分析将在 SortedSet 部分介绍。
Queue 接口常用 API
Queue 接口表示一个**先进先出(FIFO)**的集合,常用于按队列方式管理元素。
常见实现类有:
LinkedList:基于双向链表实现,既可作为队列,也可作为栈或双端队列。ArrayDeque:基于可变数组实现的双端队列,性能优于LinkedList。PriorityQueue:基于最小堆实现的优先级队列,元素按优先级出队(非 FIFO)。
常用方法汇总
| 方法名 | 说明 | 返回值 | 时间复杂度 |
|---|---|---|---|
| add(E e) | 添加元素(失败抛异常) | boolean | O(1) |
| offer(E e) | 添加元素(失败返回 false) | boolean | O(1) |
| remove() | 移除并返回队头元素(队空抛异常) | E | O(1) |
| poll() | 移除并返回队头元素(队空返回 null) | E | O(1) |
| element() | 查看队头元素(队空抛异常) | E | O(1) |
| peek() | 查看队头元素(队空返回 null) | E | O(1) |
| isEmpty() | 判断队列是否为空 | boolean | O(1) |
| size() | 返回队列中元素个数 | int | O(1) |
| clear() | 清空队列所有元素 | void | O(n) |
注:PriorityQueue 也实现了 Queue 接口,但其底层为最小堆,相关操作如 add、offer、poll、peek 的时间复杂度均为 O(log n)。
Map 接口常用 API
Map 接口用于存储键值对(key-value),每个 key 对应一个 value,且 key 不允许重复。常用于查找、映射和数据缓存等场景。
常见实现类包括:
HashMap:基于哈希表实现,支持快速查找、插入、删除,key 无序。LinkedHashMap:继承自 HashMap,使用链表维护插入顺序,迭代顺序稳定。
常用方法汇总
| 方法名 | 说明 | 返回值 | 时间复杂度 |
|---|---|---|---|
| put(K key, V value) | 添加或更新键值对 | V | O(1) 均摊 |
| get(Object key) | 获取指定 key 对应的 value | V | O(1) 均摊 |
| remove(Object key) | 移除指定 key 的映射关系 | V | O(1) 均摊 |
| containsKey(Object key) | 判断是否包含指定 key | boolean | O(1) 均摊 |
| containsValue(Object v) | 判断是否包含指定 value | boolean | O(n) |
| size() | 返回映射关系对数(键值对个数) | int | O(1) |
| isEmpty() | 判断是否为空 | boolean | O(1) |
| clear() | 清空所有键值对 | void | O(n) |
| keySet() | 返回所有 key 的集合 | Set<K> | O(n) |
| values() | 返回所有 value 的集合 | Collection<V> | O(n) |
| entrySet() | 返回所有键值对的集合 | Set<Map.Entry<K,V>> | O(n) |
注:TreeMap 也是 Map 接口的实现类,但由于其基于红黑树,时间复杂度不同,详见 SortedMap 部分分析。
SortedSet 接口常用 API
SortedSet 接口是 Set 的子接口,表示可排序的集合,其元素按照自然顺序或指定的比较器进行排序,常用于需要有序访问元素的场景。
常见实现类:
TreeSet:基于红黑树实现,元素自动排序,支持范围查询。
常用方法汇总
| 方法名 | 说明 | 返回值 | 时间复杂度 |
|---|---|---|---|
| add(E e) | 添加元素 | boolean | O(log n) |
| remove(Object o) | 移除指定元素 | boolean | O(log n) |
| contains(Object o) | 判断是否包含指定元素 | boolean | O(log n) |
| first() | 返回集合中第一个(最小)元素 | E | O(log n) |
| last() | 返回集合中最后一个(最大)元素 | E | O(log n) |
| headSet(E toElement) | 返回严格小于指定元素的子集 | SortedSet | O(log n) |
| tailSet(E fromElement) | 返回大于等于指定元素的子集 | SortedSet | O(log n) |
| subSet(E from, E to) | 返回范围 [from, to) 的子集 | SortedSet | O(log n) |
| size() | 返回元素个数 | int | O(1) |
| isEmpty() | 判断集合是否为空 | boolean | O(1) |
| clear() | 清空所有元素 | void | O(n) |
| iterator() | 返回按升序排列的迭代器 | Iterator<E> | O(1) |
Deque 接口常用 API
Deque(Double Ended Queue)接口表示双端队列,支持从队列两端插入和删除元素。它同时具备栈和队列的功能,是栈 (Stack) 和队列 (Queue) 的统一抽象。
常见实现类:
ArrayDeque:基于可变数组实现,性能优良,推荐优先使用。LinkedList:基于双向链表实现,功能丰富,但性能略逊。
常用方法汇总
| 方法名 | 说明 | 返回值 | 时间复杂度 |
|---|---|---|---|
| addFirst(E e) | 从队头添加元素 | void | O(1) |
| addLast(E e) | 从队尾添加元素 | void | O(1) |
| removeFirst() | 移除并返回队头元素 | E | O(1) |
| removeLast() | 移除并返回队尾元素 | E | O(1) |
| getFirst() | 获取但不移除队头元素 | E | O(1) |
| getLast() | 获取但不移除队尾元素 | E | O(1) |
| offerFirst(E e) | 从队头插入元素(推荐,带返回值) | boolean | O(1) |
| offerLast(E e) | 从队尾插入元素(推荐,带返回值) | boolean | O(1) |
| pollFirst() | 移除并返回队头元素(为空返回 null) | E | O(1) |
| pollLast() | 移除并返回队尾元素(为空返回 null) | E | O(1) |
| peekFirst() | 获取但不移除队头元素(为空返回 null) | E | O(1) |
| peekLast() | 获取但不移除队尾元素(为空返回 null) | E | O(1) |
| isEmpty() | 判断是否为空 | boolean | O(1) |
| size() | 返回元素个数 | int | O(1) |
| clear() | 清空所有元素 | void | O(n) |
注:建议优先使用 offerXxx、pollXxx、peekXxx 这些方法,它们在队列为空或满时不会抛异常,更安全。
SortedMap 接口常用 API
SortedMap 接口继承自 Map,表示按键排序的映射表,常见实现类为 TreeMap。
常用方法汇总
| 方法名 | 说明 | 返回值 | 时间复杂度 |
|---|---|---|---|
| comparator() | 返回用于排序的比较器,若为自然顺序则返回 null | Comparator<? super K> | O(1) |
| firstKey() | 返回键的第一个(最低)元素 | K | O(log n) |
| lastKey() | 返回键的最后一个(最高)元素 | K | O(log n) |
| subMap(K fromKey, K toKey) | 返回指定键范围的子映射 | SortedMap<K,V> | O(log n) |
| headMap(K toKey) | 返回小于 toKey 的键的子映射 | SortedMap<K,V> | O(log n) |
| tailMap(K fromKey) | 返回大于等于 fromKey 的键的子映射 | SortedMap<K,V> | O(log n) |
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
