Java 刷题必备:HashMap、HashSet、ArrayList 超全速记手册
·
在 Java 算法刷题和日常开发中,HashMap、HashSet、ArrayList 是使用率最高的三个集合工具,堪称「刷题三巨头」。本文整理了它们的基础用法、核心方法、高频场景、易错点,纯干货无废话,背会就能直接上手写代码!
一、HashMap 键值对映射神器
核心特点
- 存储结构:key-value 键值对,key 唯一、value 可重复
- 性能:增删改查均为 O (1),效率拉满
- 特性:无序,不保证存储顺序
1. 基础创建
泛型指定键和值的类型,支持任意引用类型:
// 字符为键,整数为值(常用:字符计数)
HashMap<Character, Integer> map = new HashMap<>();
// 整数为键,整数为值(常用:数字计数)
HashMap<Integer, Integer> map = new HashMap<>();
2. 核心常用方法(刷题必背)
| 方法 | 作用 | 关键特性 |
|---|---|---|
put(key, value) |
存入键值对 | 键重复时覆盖旧值 |
get(key) |
根据键取值 | 键不存在返回 null |
getOrDefault(key, 默认值) |
安全取值 | 键不存在返回默认值,避免空指针(刷题首选) |
containsKey(key) |
判断键是否存在 | 返回 boolean 值 |
remove(key) |
删除指定键的键值对 | 直接删除,无返回值 |
isEmpty() |
判断是否为空 | 空返回 true |
size() |
获取键值对数量 | 返回 int 类型 |
代码示例:
map.put('a', 1); // 存值
Integer val = map.get('a'); // 取值
map.getOrDefault('b', 0); // 无'b',返回0
if(map.containsKey('a')){} // 判断键存在
3. 三种遍历方式
// 1. 遍历所有key(最常用)
for(char k : map.keySet()){}
// 2. 遍历所有value
for(int v : map.values()){}
// 3. 键值对一起遍历
for(Map.Entry<Character,Integer> entry : map.entrySet()){
char k = entry.getKey();
int v = entry.getValue();
}
4. 刷题万能计数模板
所有频次统计、异位词、重复数题目直接套:
// 元素计数+1
map.put(c, map.getOrDefault(c, 0) + 1);
// 元素计数-1
map.put(c, map.get(c) - 1);
5. 高频易错点
- 比较内容不能用 ==,必须用
equals() get(key)无结果返回null,int 接收会报错 → 优先用getOrDefault- HashMap 无序,需要有序用
LinkedHashMap
二、HashSet 去重 & 存在判断神器
核心特点
- 存储结构:单个元素,无键值对
- 核心特性:元素不重复、无序
- 性能:查询 O (1),专门用于去重和存在性判断
1. 基础创建
import java.util.HashSet;
import java.util.Set;
// 字符集合
Set<Character> set = new HashSet<>();
// 整数集合
Set<Integer> set = new HashSet<>();
2. 核心常用方法(必背)
| 方法 | 作用 | 关键特性 |
|---|---|---|
add(元素) |
添加元素 | 重复元素自动忽略 |
contains(元素) |
判断元素是否存在 | 返回 boolean(刷题高频) |
remove(元素) |
删除指定元素 | 直接删除 |
isEmpty() |
判断是否为空 | 空返回 true |
size() |
获取元素个数 | 返回 int |
clear() |
清空所有元素 | 无返回值 |
代码示例:
set.add('a'); // 添加元素
if(set.contains('a')){} // 判断存在
set.remove('b'); // 删除元素
3. 常用遍历
// 增强for循环(最简单)
for(char c : set){ }
4. 刷题高频场景
- 数组 / 字符串去重
- 判断是否包含重复元素
- 快速校验元素是否存在
5. HashSet vs HashMap(必考)
HashSet:存单个元素,用于去重、判断存在HashMap:存键值对,用于统计次数、数据映射
三、ArrayList 动态数组神器
核心特点
- 对比普通数组:长度动态可变,自动扩容
- 底层:动态数组,支持下标访问
- 注意:只能存引用类型,基本类型用包装类(Integer/Character)
1. 基础创建
import java.util.ArrayList;
import java.util.List;
// 整数动态数组
List<Integer> list = new ArrayList<>();
// 字符动态数组
List<Character> list = new ArrayList<>();
// 字符串动态数组
List<String> list = new ArrayList<>();
2. 核心常用方法(刷题天花板)
新增元素
add(e):末尾添加元素,返回 booleanadd(index, e):指定下标插入元素
list.add(3); // 末尾加3
list.add(1, 5); // 下标1处插入5
获取 & 修改元素
get(index):获取指定下标元素set(index, e):修改指定下标元素,返回被替换的旧值
int num = list.get(0); // 取下标0
int old = list.set(0, 99); // 修改下标0为99
删除元素(高频易错)
remove(int index):按下标删除,返回被删元素remove(Object o):按元素删除,返回 boolean
int del = list.remove(0); // 删除下标0
boolean ok = list.remove((Integer)5); // 删除元素5
其他常用方法
| 方法 | 作用 |
|---|---|
size() |
获取元素个数 |
isEmpty() |
判断是否为空 |
contains() |
判断元素是否存在 |
indexOf() |
获取元素第一个下标,无则返回 - 1 |
clear() |
清空集合 |
3. 数组 ↔ ArrayList 互转(算法高频)
// 1. 数组转ArrayList(遍历添加)
int[] arr = {1,2,3};
List<Integer> list = new ArrayList<>();
for(int num : arr){ list.add(num); }
// 2. ArrayList转数组
Integer[] arr = list.toArray(new Integer[0]);
4. 极简总结
add(e)→ 末尾添加get(i)→ 下标取值set(i,e)→ 修改元素remove(i)→ 按下标删remove(obj)→ 按元素删size()→ 查长度contains()→ 判存在
总结
这三个集合是 Java 刷题的「基础骨架」:
- 统计次数、存映射 → 用 HashMap
- 去重、判存在 → 用 HashSet
- 动态存数据、下标访问 → 用 ArrayList
熟记本文的方法和场景,算法题和开发代码直接秒写!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)