Java/后端

Java容器

java容器学习,在这里进行记录。包括方法和c++类比

所有容器均在 java.util 包中,可直接 import java.util.*;

一、ArrayList

  • 导入:import java.util.ArrayList;
  • 初始化:List<String> list = new ArrayList<>();
  • C++ 类似:std::vector
类别方法说明
add(e)添加到末尾
add(index, e)插入到指定位置
get(index)获取指定位置元素
size()元素个数
isEmpty()是否为空
contains(e)是否包含某元素
indexOf(e)第一次出现的索引,没有返回 -1
set(index, e)替换指定位置元素
remove(index)删除指定位置元素
remove(Object)删除第一次出现的指定元素
clear()清空所有元素
截取subList(from, to)获取子列表(左闭右开)
遍历iterator()迭代器
遍历forEach(Consumer)增强 for 循环 / Lambda

二、LinkedList

  • 导入:import java.util.LinkedList;
  • 初始化(当 List 用):List<String> list = new LinkedList<>();
  • 初始化(当 Deque 用):Deque<String> deque = new LinkedList<>();
  • C++ 类似:std::list / std::deque

List 部分方法

add(e)add(index, e)get(index)size()isEmpty()contains(e)indexOf(e)set(index, e)remove(index)remove(Object)clear()subList(from, to)iterator()forEach

—— 同上(ArrayList)

Deque 额外方法

类别方法说明
addFirst(e) / offerFirst(e)添加到队首,功能相同
addLast(e) / offerLast(e)添加到队尾,功能相同
add(e) / offer(e)添加到队尾,功能相同(同 List 的 add)
push(e)压入栈顶(等价于 addFirst)
removeFirst() / pollFirst()删除并返回队首,功能相同
removeLast() / pollLast()删除并返回队尾,功能相同
remove() / poll()删除并返回队首,功能相同
pop()弹出栈顶(等价于 removeFirst)
getFirst() / peekFirst()获取队首,功能相同
getLast() / peekLast()获取队尾,功能相同
peek()获取队首,功能相同
element()获取队首,功能相同

三、HashSet

  • 导入:import java.util.HashSet;
  • 初始化:Set<String> set = new HashSet<>();
  • C++ 类似:std::unordered_set
类别方法说明
add(e)添加元素,已存在则返回 false
remove(e)删除指定元素
clear()清空
contains(e)是否包含某元素
size()元素个数
isEmpty()是否为空
遍历iterator()迭代器
遍历forEach(Consumer)Lambda 遍历

四、TreeSet

  • 导入:import java.util.TreeSet;
  • 初始化:Set<String> set = new TreeSet<>();
  • C++ 类似:std::set

Set 部分方法

add(e)remove(e)contains(e)size()isEmpty()clear()iterator()forEach

—— 同上(HashSet)

有序额外方法

方法说明
first()最小元素
last()最大元素
headSet(e)小于 e 的所有元素(左闭右开)
tailSet(e)大于等于 e 的所有元素
subSet(from, to)范围 [from, to)
ceiling(e)大于等于 e 的最小元素
floor(e)小于等于 e 的最大元素
higher(e)严格大于 e 的最小元素
lower(e)严格小于 e 的最大元素

五、HashMap

  • 导入:import java.util.HashMap;
  • 初始化:Map<String, Integer> map = new HashMap<>();
  • C++ 类似:std::unordered_map
类别方法说明
增 / 改put(k, v)放入键值对,键存在则覆盖
增 / 改putIfAbsent(k, v)键不存在时才放入
get(k)获取值,不存在返回 null
getOrDefault(k, def)获取值,不存在返回默认值 def
containsKey(k)是否包含键
containsValue(v)是否包含值
size()键值对数量
isEmpty()是否为空
remove(k)删除键并返回对应值
remove(k, v)仅当键值都匹配才删除
clear()清空
遍历keySet()所有键的 Set
遍历values()所有值的 Collection
遍历entrySet()所有键值对的 Set
遍历forEach((k, v) -> ...)Lambda 遍历

六、TreeMap

  • 导入:import java.util.TreeMap;
  • 初始化:Map<String, Integer> map = new TreeMap<>();
  • C++ 类似:std::map

Map 部分方法

put(k, v)putIfAbsent(k, v)get(k)getOrDefault(k, def)containsKey(k)containsValue(v)remove(k)remove(k, v)size()isEmpty()clear()keySet()values()entrySet()forEach

—— 同上(HashMap)

有序额外方法

方法说明
firstKey()最小键
lastKey()最大键
headMap(k)键小于 k 的所有键值对(左闭右开)
tailMap(k)键大于等于 k 的所有键值对
subMap(k1, k2)键范围 [k1, k2)
ceilingKey(k)大于等于 k 的最小键
floorKey(k)小于等于 k 的最大键
higherKey(k)严格大于 k 的最小键
lowerKey(k)严格小于 k 的最大键

附:快速创建不可变集合(Java 9+)

  • List<String> list = List.of("a", "b", "c");
  • Set<String> set = Set.of("a", "b", "c");
  • Map<String, Integer> map = Map.of("a", 1, "b", 2);

注意:这些集合不可变,不能增删改。