Java集合框架常用API有哪些?List、Set、Map做法大全

作者:袖梨 2026-08-06

Java集合框架常用API有哪些?List、Set、Map做法大全并不只看表面做法,关键还要理解相关条件、限制和后续影响。

前言

1. 本文主要介绍 Java 标准库中 java.util 包下的集合框架,不涉及 java.util.concurrent(JUC)包中的并发集合类。

2. 文章侧重于常用集合类及其常用 API 的整理与总结,旨在为日常开发提供查阅参考,不涉及底层原理或面试相关问题的深入探讨。

集合框架概述

Java集合框架常用API有哪些?List、Set、Map方法大全

图 1:Java 集合框架结构图(图源自 Java Guide)

Java 中的集合(也称为容器)框架主要由两大核心接口组成:

  1. Collection 接口:用于存储单个元素的集合,常见的子接口包括 ListSetQueue
  2. Map 接口:用于存储键值对形式的数据。

其中,Collection 是最基础的集合接口,根据元素的组织方式又衍生出以下三种常用子接口:

List

  1. 元素有序、可重复,支持通过索引访问。
  2. 常见实现类:ArrayListLinkedListVector

Set

  1. 元素无序、不可重复,适用于去重场景。
  2. 常见实现类:HashSetLinkedHashSetTreeSet
  3. 派生子接口SortedSet(如 TreeSet),用于提供有序集合支持。

Queue

  1. 用于队列结构,强调元素的处理顺序。
  2. 常见实现类:LinkedListPriorityQueueArrayDeque
  3. 派生子接口Deque(双端队列接口),支持从两端插入和删除元素。

Map 接口则用于保存键值对(key-value)结构的数据:

  1. 常见实现类:HashMapLinkedHashMapTreeMapHashtable
  2. 派生子接口SortedMap(如 TreeMap),用于维护键的有序性。

注:集合框架中的一些接口(如 SortedSetDequeSortedMap)并不常在项目中直接使用,但它们是一些重要实现类(如 TreeSetArrayDequeTreeMap)的核心接口,理解这些结构有助于掌握集合的使用与底层行为。

List 接口常用 API

List 接口表示有序、可重复的元素集合,支持通过索引访问元素。

常见实现类有:

  1. ArrayList:基于动态数组实现,支持快速随机访问,但在数组中间插入或删除元素时性能较差。
  2. LinkedList:基于双向链表实现,在两端插入和删除元素较快,但随机访问元素需要从头或尾遍历,性能较低。

常用方法汇总

方法名说明返回值时间复杂度
add(E e)向列表尾部添加元素booleanArrayList: O(1) 均摊;LinkedList: O(1)
add(int index, E e)在指定位置插入元素voidO(n)
get(int index)获取指定索引位置的元素EArrayList: O(1);LinkedList: O(n)
set(int index, E e)替换指定索引位置的元素EArrayList: O(1);LinkedList: O(n)
remove(int index)移除指定索引处的元素EO(n)
remove(Object o)移除首次出现的指定元素booleanO(n)
contains(Object o)判断是否包含指定元素booleanO(n)
indexOf(Object o)返回首次出现的索引intO(n)
lastIndexOf(Object o)返回最后一次出现的索引intO(n)
size()返回列表中的元素个数intO(1)
isEmpty()判断列表是否为空booleanO(1)
clear()清空所有元素voidO(n)
toArray()转为数组Object[]O(n)

Set 接口常用 API

Set 接口表示不允许包含重复元素的集合,主要用于保证元素的唯一性。

常见实现类有:

  1. HashSet:基于哈希表实现,支持快速插入、删除和查找,元素无序。
  2. LinkedHashSet:继承自 HashSet,使用链表维护元素插入顺序,迭代顺序稳定。
  3. TreeSet:基于红黑树实现,元素有序,支持排序操作。

常用方法汇总

方法名说明返回值时间复杂度
add(E e)添加元素booleanO(1) 均摊
remove(Object o)移除指定元素booleanO(1) 均摊
contains(Object o)判断是否包含指定元素booleanO(1) 均摊
size()返回集合中的元素个数intO(1)
isEmpty()判断集合是否为空booleanO(1)
clear()清空所有元素voidO(n)
iterator()返回迭代器Iterator<E>O(1)
toArray()转为数组Object[]O(n)

注:TreeSet 也是 Set 接口的实现类,时间复杂度的分析将在 SortedSet 部分介绍。

Queue 接口常用 API

Queue 接口表示一个先进先出(FIFO)的集合,常用于按队列方式管理元素。

常见实现类有:

  1. LinkedList:基于双向链表实现,既可作为队列,也可作为栈或双端队列。
  2. ArrayDeque:基于可变数组实现的双端队列,性能优于 LinkedList
  3. PriorityQueue:基于最小堆实现的优先级队列,元素按优先级出队(非 FIFO)。

常用方法汇总

方法名说明返回值时间复杂度
add(E e)添加元素(失败抛异常)booleanO(1)
offer(E e)添加元素(失败返回 false)booleanO(1)
remove()移除并返回队头元素(队空抛异常)EO(1)
poll()移除并返回队头元素(队空返回 null)EO(1)
element()查看队头元素(队空抛异常)EO(1)
peek()查看队头元素(队空返回 null)EO(1)
isEmpty()判断队列是否为空booleanO(1)
size()返回队列中元素个数intO(1)
clear()清空队列所有元素voidO(n)

注:PriorityQueue 也实现了 Queue 接口,但其底层为最小堆,相关操作如 addofferpollpeek 的时间复杂度均为 O(log n)。

Map 接口常用 API

Map 接口用于存储键值对(key-value),每个 key 对应一个 value,且 key 不允许重复。常用于查找、映射和数据缓存等场景。

常见实现类包括:

  1. HashMap:基于哈希表实现,支持快速查找、插入、删除,key 无序。
  2. LinkedHashMap:继承自 HashMap,使用链表维护插入顺序,迭代顺序稳定。

常用方法汇总

方法名说明返回值时间复杂度
put(K key, V value)添加或更新键值对VO(1) 均摊
get(Object key)获取指定 key 对应的 valueVO(1) 均摊
remove(Object key)移除指定 key 的映射关系VO(1) 均摊
containsKey(Object key)判断是否包含指定 keybooleanO(1) 均摊
containsValue(Object v)判断是否包含指定 valuebooleanO(n)
size()返回映射关系对数(键值对个数)intO(1)
isEmpty()判断是否为空booleanO(1)
clear()清空所有键值对voidO(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 的子接口,表示可排序的集合,其元素按照自然顺序或指定的比较器进行排序,常用于需要有序访问元素的场景。

常见实现类:

  1. TreeSet:基于红黑树实现,元素自动排序,支持范围查询。

常用方法汇总

方法名说明返回值时间复杂度
add(E e)添加元素booleanO(log n)
remove(Object o)移除指定元素booleanO(log n)
contains(Object o)判断是否包含指定元素booleanO(log n)
first()返回集合中第一个(最小)元素EO(log n)
last()返回集合中最后一个(最大)元素EO(log n)
headSet(E toElement)返回严格小于指定元素的子集SortedSetO(log n)
tailSet(E fromElement)返回大于等于指定元素的子集SortedSetO(log n)
subSet(E from, E to)返回范围 [from, to) 的子集SortedSetO(log n)
size()返回元素个数intO(1)
isEmpty()判断集合是否为空booleanO(1)
clear()清空所有元素voidO(n)
iterator()返回按升序排列的迭代器Iterator<E>O(1)

Deque 接口常用 API

Deque(Double Ended Queue)接口表示双端队列,支持从队列两端插入和删除元素。它同时具备栈和队列的功能,是栈 (Stack) 和队列 (Queue) 的统一抽象。

常见实现类:

  1. ArrayDeque:基于可变数组实现,性能优良,推荐优先使用。
  2. LinkedList:基于双向链表实现,功能丰富,但性能略逊。

常用方法汇总

方法名说明返回值时间复杂度
addFirst(E e)从队头添加元素voidO(1)
addLast(E e)从队尾添加元素voidO(1)
removeFirst()移除并返回队头元素EO(1)
removeLast()移除并返回队尾元素EO(1)
getFirst()获取但不移除队头元素EO(1)
getLast()获取但不移除队尾元素EO(1)
offerFirst(E e)从队头插入元素(推荐,带返回值)booleanO(1)
offerLast(E e)从队尾插入元素(推荐,带返回值)booleanO(1)
pollFirst()移除并返回队头元素(为空返回 null)EO(1)
pollLast()移除并返回队尾元素(为空返回 null)EO(1)
peekFirst()获取但不移除队头元素(为空返回 null)EO(1)
peekLast()获取但不移除队尾元素(为空返回 null)EO(1)
isEmpty()判断是否为空booleanO(1)
size()返回元素个数intO(1)
clear()清空所有元素voidO(n)

注:建议优先使用 offerXxxpollXxxpeekXxx 这些方法,它们在队列为空或满时不会抛异常,更安全。

SortedMap 接口常用 API

SortedMap 接口继承自 Map,表示按键排序的映射表,常见实现类为 TreeMap

常用方法汇总

方法名说明返回值时间复杂度
comparator()返回用于排序的比较器,若为自然顺序则返回 nullComparator<? super K>O(1)
firstKey()返回键的第一个(最低)元素KO(log n)
lastKey()返回键的最后一个(最高)元素KO(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)

总结

相关文章

精彩推荐