Java 刷题必备:HashMap、HashSet、ArrayList 超全速记手册
在 Java 算法刷题和日常开发中HashMap、HashSet、ArrayList是使用率最高的三个集合工具堪称「刷题三巨头」。本文整理了它们的基础用法、核心方法、高频场景、易错点纯干货无废话背会就能直接上手写代码一、HashMap 键值对映射神器核心特点存储结构key-value 键值对key 唯一、value 可重复性能增删改查均为 O (1)效率拉满特性无序不保证存储顺序1. 基础创建泛型指定键和值的类型支持任意引用类型// 字符为键整数为值常用字符计数 HashMapCharacter, Integer map new HashMap(); // 整数为键整数为值常用数字计数 HashMapInteger, Integer map new HashMap();2. 核心常用方法刷题必背方法作用关键特性put(key, value)存入键值对键重复时覆盖旧值get(key)根据键取值键不存在返回nullgetOrDefault(key, 默认值)安全取值键不存在返回默认值避免空指针刷题首选containsKey(key)判断键是否存在返回 boolean 值remove(key)删除指定键的键值对直接删除无返回值isEmpty()判断是否为空空返回 truesize()获取键值对数量返回 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.EntryCharacter,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)无结果返回nullint 接收会报错 → 优先用getOrDefaultHashMap 无序需要有序用LinkedHashMap二、HashSet 去重 存在判断神器核心特点存储结构单个元素无键值对核心特性元素不重复、无序性能查询 O (1)专门用于去重和存在性判断1. 基础创建import java.util.HashSet; import java.util.Set; // 字符集合 SetCharacter set new HashSet(); // 整数集合 SetInteger set new HashSet();2. 核心常用方法必背方法作用关键特性add(元素)添加元素重复元素自动忽略contains(元素)判断元素是否存在返回 boolean刷题高频remove(元素)删除指定元素直接删除isEmpty()判断是否为空空返回 truesize()获取元素个数返回 intclear()清空所有元素无返回值代码示例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/Character1. 基础创建import java.util.ArrayList; import java.util.List; // 整数动态数组 ListInteger list new ArrayList(); // 字符动态数组 ListCharacter list new ArrayList(); // 字符串动态数组 ListString 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)按元素删除返回 booleanint del list.remove(0); // 删除下标0 boolean ok list.remove((Integer)5); // 删除元素5其他常用方法方法作用size()获取元素个数isEmpty()判断是否为空contains()判断元素是否存在indexOf()获取元素第一个下标无则返回 - 1clear()清空集合3. 数组 ↔ ArrayList 互转算法高频// 1. 数组转ArrayList遍历添加 int[] arr {1,2,3}; ListInteger 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熟记本文的方法和场景算法题和开发代码直接秒写