目录
Set
HashMap
String
【LeetCode | 常用函数】Collections工具类 和 List类
https://blog.csdn.net/h52412224/article/details/158421854?spm=1001.2014.3001.5502
【LeetCode | 常用函数】Arrays工具类 和 Collection接口
https://blog.csdn.net/h52412224/article/details/157839845?spm=1001.2014.3001.5502
Set
下表:HashSet和TreeSet共有方法
|
方法签名 |
功能描述 |
算法场景示例 |
|
boolean add(E e) |
添加元素(成功返回 true;元素已存在返回 false) |
自动去重(如收集不重复元素、统计 distinct 值) |
|
boolean remove(Object o) |
删除指定元素(成功返回 true) |
移除不满足条件的元素 |
|
boolean contains(Object o) |
判断是否包含指定元素(O (1) 复杂度,HashSet) |
高频判重(如两数之和中判断补数是否存在) |
|
int size() |
返回元素个数 |
统计不重复元素个数 |
|
boolean isEmpty() |
判断是否为空 |
边界判断(如无去重结果时返回空集合) |
|
void clear() |
清空所有元素 |
多组测试用例重置集合 |
|
Iterator<E> iterator() |
返回迭代器(遍历元素) |
遍历 Set(无 foreach 时用) |
下表:TreeSet 特有方法(有序去重)
|
方法签名 |
功能描述 |
算法场景示例 |
|
E first() |
获取排序后的第一个元素(最小值) |
找最小的不重复元素 |
|
E last() |
获取排序后的最后一个元素(最大值) |
找最大的不重复元素 |
|
E lower(E e) |
获取小于 e 的最大元素(紧邻) |
找比目标值小的最大元素 |
|
E higher(E e) |
获取大于 e 的最小元素(紧邻) |
找比目标值大的最小元素 |
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class SetHighFreqDemo {
public static void main(String[] args) {
// ====================== HashSet(高效去重、判存)======================
Set<Integer> hashSet = new HashSet<>();
// 1. 增:add 自动去重
hashSet.add(3);
hashSet.add(1);
hashSet.add(2);
hashSet.add(1); // 重复元素,添加失败
System.out.println("HashSet(无序去重):" + hashSet); // [1, 2, 3](顺序不固定)
// 2. 查:contains 高效判存(O(1))
boolean has2 = hashSet.contains(2);
System.out.println("HashSet是否包含2:" + has2); // true
// 3. 删:remove 删除元素
hashSet.remove(3);
System.out.println("HashSet删除3后:" + hashSet); // [1, 2]
// 4. 遍历:foreach + 迭代器
System.out.print("HashSet遍历(foreach):");
for (int num : hashSet) {
System.out.print(num + " "); // 1 2(顺序不固定)
}
System.out.print("HashSet遍历(迭代器):");
Iterator<Integer> iterator = hashSet.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " "); // 1 2
}
// ====================== TreeSet(有序去重)======================
Set<Integer> treeSet = new TreeSet<>();
treeSet.add(3);
treeSet.add(1);
treeSet.add(2);
treeSet.add(1); // 重复元素,添加失败
System.out.println("\\nTreeSet(自然升序):" + treeSet); // [1, 2, 3](有序)
// TreeSet 特有方法
int min = treeSet.first(); // 最小值:1
int max = treeSet.last(); // 最大值:3
int lower2 = treeSet.lower(2); // 小于2的最大元素:1
int higher2 = treeSet.higher(2); // 大于2的最小元素:3
System.out.println("TreeSet最小值:" + min + ",最大值:" + max);
System.out.println("小于2的最大元素:" + lower2 + ",大于2的最小元素:" + higher2);
// 其他通用方法
System.out.println("TreeSet大小:" + treeSet.size()); // 3
treeSet.clear();
System.out.println("TreeSet清空后:" + treeSet); // []
}
}
HashMap
下表:高频方法
|
方法签名 |
功能描述 |
算法场景示例 |
|
V put(K key, V value) |
存入键值对:key 不存在则新增,存在则覆盖值 |
统计元素出现次数(map.put(num, map.getOrDefault(num, 0)+1))、记录键值映射 |
|
V get(Object key) |
根据 key 获取 value,不存在返回 null |
查找键对应的结果(如两数之和中查找 target – num 是否存在) |
|
V remove(Object key) |
根据 key 删除键值对,返回被删除的 value |
移除已处理的键(如滑动窗口中移除窗口左边界元素) |
|
boolean containsKey(Object key) |
判断 key 是否存在于 Map 中 |
避免 get 返回 null 空指针(如判断目标键是否存在) |
|
boolean containsValue(Object val) |
判断 value 是否存在(O (n) 复杂度,慎用) |
极少用(需遍历所有值),优先用 containsKey |
|
方法签名 |
功能描述 |
算法场景示例 |
|
V getOrDefault(Object key, V defaultValue) |
获取 key 对应的值,不存在则返回默认值 |
统计元素次数(无需先判断 key 是否存在,直接 map.getOrDefault(num, 0)+1) |
|
V putIfAbsent(K key, V value) |
仅当 key 不存在时存入,存在则不修改 |
初始化键值对(如记录第一次出现的元素索引) |
|
int size() |
返回键值对的个数 |
判断 Map 是否为空、统计有效映射数量(如去重后元素个数) |
|
void clear() |
清空所有键值对 |
多组测试用例时重置 Map,避免数据污染 |
|
boolean isEmpty() |
判断 Map 是否为空 |
边界判断(如是否没有符合条件的映射) |
遍历
1. 遍历键值对
// 方式1:foreach 遍历 entrySet(推荐,代码简洁)
for (Map.Entry<Integer, Integer> entry : map.entrySet()) { //Map.Entry<Integer, Integer>
int key = entry.getKey(); // 获取键
int value = entry.getValue(); // 获取值
// 业务逻辑(如判断 value 最大的 key)
}
2. 仅遍历键
for (Integer key : map.keySet()) {
int value = map.get(key);
// 业务逻辑
}
3. 仅遍历值
for (Integer value : map.values()) {
// 业务逻辑(如求最大 value)
}
String
|
功能分类 |
方法签名 |
功能描述 |
算法场景示例 |
|
字符访问与长度 |
int length() |
返回字符串长度(字符个数) |
循环边界、判断空字符串 |
|
字符访问与长度 |
char charAt(int index) |
返回指定索引的字符(索引越界抛异常) |
遍历字符(回文判断、字符统计) |
|
字符访问与长度 |
char[] toCharArray() |
转为字符数组(方便修改、双指针操作) |
字符串排序、字符替换 |
|
查找与匹配 |
int indexOf(String str) |
查找子串首次出现的索引(未找到返回 -1) |
判断子串是否存在、统计子串出现次数 |
|
查找与匹配 |
int indexOf(String str, int fromIndex) |
从指定索引开始查找子串首次出现位置 |
多次查找子串 |
|
查找与匹配 |
int lastIndexOf(String str) |
查找子串末次出现的索引(未找到返回 -1) |
截取文件名、路径解析 |
|
查找与匹配 |
boolean contains(CharSequence s) |
判断是否包含指定子串(等价于 indexOf(s) != -1) |
关键词匹配、子串存在性判断 |
|
查找与匹配 |
boolean startsWith(String prefix) |
判断是否以指定前缀开头 |
网址前缀判断、格式校验 |
|
查找与匹配 |
boolean endsWith(String suffix) |
判断是否以指定后缀结尾 |
文件后缀判断(如 .txt) |
|
截取与分割 |
String substring(int beginIndex) |
从指定索引截取到字符串末尾(左闭) |
截取后缀、去除前缀 |
|
截取与分割 |
String substring(int beginIndex, int endIndex) |
截取 [beginIndex, endIndex) 区间子串(左闭右开) |
提取中间子串 |
|
截取与分割 |
String[] split(String regex) |
按正则表达式分割字符串,返回字符串数组 |
解析分隔符字符串(日期、IP) |
|
截取与分割 |
String[] split(String regex, int limit) |
按正则分割,限制分割后的数组长度 |
精准分割(如只分割前 2 部分) |
|
替换与修改 |
String replace(char oldChar, char newChar) |
替换所有指定字符 |
大小写转换、空格替换 |
|
替换与修改 |
String replace(CharSequence target, CharSequence replacement) |
替换所有指定子串 |
敏感词替换、格式修正 |
|
替换与修改 |
String replaceAll(String regex, String replacement) |
按正则替换所有匹配内容 |
去除非数字 / 字母字符、复杂格式清洗 |
|
替换与修改 |
String trim() |
去除首尾空白字符(空格、制表符、换行符) |
输入格式清洗 |
|
替换与修改 |
String strip() |
去除首尾空白字符(支持 Unicode 空白,JDK 11+) |
更全面的去空格(推荐) |
|
替换与修改 |
String toLowerCase() |
转为小写字符串 |
大小写不敏感匹配 |
|
替换与修改 |
String toUpperCase() |
转为大写字符串 |
同上(统一格式) |
|
判断与比较 |
boolean equals(Object anObject) |
比较字符串内容是否完全一致(区分大小写) |
答案匹配、登录验证 |
|
判断与比较 |
boolean equalsIgnoreCase(String anotherString) |
忽略大小写比较内容是否一致 |
关键词匹配、文件后缀判断(不区分大小写) |
|
判断与比较 |
boolean isEmpty() |
判断字符串是否为空(长度为 0) |
输入校验(是否为空输入) |
|
判断与比较 |
boolean isBlank() |
判断字符串是否全为空白(JDK 11+,包括空串) |
严格空白校验(是否为空格输入) |
|
判断与比较 |
int compareTo(String anotherString) |
按字典序比较(返回负数 / 0 / 正数) |
字符串排序、自定义排序规则 |
|
拼接与转换 |
String concat(String str) |
拼接字符串(等价于 +,效率略高) |
组装结果字符串 |
|
拼接与转换 |
static String valueOf(Object obj) |
将任意类型转为字符串(静态方法) |
数据类型转换(int→String、对象→String) |
|
拼接与转换 |
static String join(CharSequence delimiter, CharSequence… elements) |
用分隔符拼接多个字符串(静态方法) |
数组 / 集合转字符串(逗号分隔、箭头分隔) |
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class StringAllHighFreqDemo {
public static void main(String[] args) {
// ====================== 1. 字符访问与长度 ======================
String s = "abc123";
System.out.println("1. 字符访问与长度:");
System.out.println(" 字符串:" + s);
System.out.println(" 长度:" + s.length()); // 6
System.out.println(" 索引2的字符:" + s.charAt(2)); // 'c'
// 转为字符数组(回文判断示例)
char[] chars = s.toCharArray();
int left = 0, right = chars.length – 1;
boolean isPalindrome = true;
while (left < right) {
if (chars[left] != chars[right]) {
isPalindrome = false;
break;
}
left++;
right–;
}
System.out.println(" 是否为回文:" + isPalindrome); // false(abc123 不是回文)
// ====================== 2. 查找与匹配 ======================
String sFind = "leetcode";
System.out.println("\\n2. 查找与匹配:");
System.out.println(" 字符串:" + sFind);
System.out.println(" 首次出现 'e' 的索引:" + sFind.indexOf('e')); // 1
System.out.println(" 从索引2开始找 'e':" + sFind.indexOf('e', 2)); // 2
System.out.println(" 末次出现 'e' 的索引:" + sFind.lastIndexOf('e')); // 6
System.out.println(" 是否包含 'code':" + sFind.contains("code")); // true
System.out.println(" 是否以 'lee' 开头:" + sFind.startsWith("lee")); // true
System.out.println(" 是否以 'ode' 结尾:" + sFind.endsWith("ode")); // true
// 统计子串出现次数
String target = "e";
int count = 0;
int start = 0;
while ((start = sFind.indexOf(target, start)) != -1) {
count++;
start += target.length();
}
System.out.println(" 'e' 出现次数:" + count); // 3
// ====================== 3. 截取与分割 ======================
String sSplit = "2025-11-23";
System.out.println("\\n3. 截取与分割:");
System.out.println(" 字符串:" + sSplit);
System.out.println(" 从索引5截取:" + sSplit.substring(5)); // "11-23"
System.out.println(" 截取 [0,4):" + sSplit.substring(0, 4)); // "2025"
// 日期分割
String[] dateParts = sSplit.split("-");
System.out.println(" 分割后(年-月-日):" + Arrays.toString(dateParts)); // [2025,11,23]
// 限制分割长度
String sSplit2 = "a,b,c,d";
String[] partsLimit = sSplit2.split(",", 2);
System.out.println(" 限制分割为2部分:" + Arrays.toString(partsLimit)); // [a, b,c,d]
// 分割正则特殊字符(IP地址)
String ip = "192.168.1.1";
String[] ipParts = ip.split("\\\\.");
System.out.println(" IP分割:" + Arrays.toString(ipParts)); // [192,168,1,1]
// ====================== 4. 替换与修改 ======================
String sReplace = " Hello World! 123 ";
System.out.println("\\n4. 替换与修改:");
System.out.println(" 原字符串:'" + sReplace + "'");
System.out.println(" 替换 'l' 为 'x':" + sReplace.replace('l', 'x')); // " Hexxo Worxd! 123 "
System.out.println(" 替换 'World' 为 'Java':" + sReplace.replace("World", "Java")); // " Hello Java! 123 "
System.out.println(" 去除非字母:" + sReplace.replaceAll("[^a-zA-Z]", "")); // "HelloWorld"
System.out.println(" trim去空格:'" + sReplace.trim() + "'"); // "Hello World! 123"
System.out.println(" strip去空格:'" + sReplace.strip() + "'"); // "Hello World! 123"
System.out.println(" 转小写:" + sReplace.strip().toLowerCase()); // "hello world! 123"
System.out.println(" 转大写:" + sReplace.strip().toUpperCase()); // "HELLO WORLD! 123"
// ====================== 5. 判断与比较 ======================
String s1 = "Apple";
String s2 = "apple";
String s3 = "";
String s4 = " ";
System.out.println("\\n5. 判断与比较:");
System.out.println(" s1=" + s1 + ", s2=" + s2);
System.out.println(" equals(区分大小写):" + s1.equals(s2)); // false
System.out.println(" equalsIgnoreCase(忽略大小写):" + s1.equalsIgnoreCase(s2)); // true
System.out.println(" s3.isEmpty():" + s3.isEmpty()); // true
System.out.println(" s4.isEmpty():" + s4.isEmpty()); // false
System.out.println(" s4.isBlank():" + s4.isBlank()); // true(JDK11+)
System.out.println(" 字典序比较(s1.compareTo(s2)):" + s1.compareTo(s2)); // -32
// 字符串数组排序
String[] strs = {"banana", "apple", "cherry"};
Arrays.sort(strs);
System.out.println(" 字符串数组排序:" + Arrays.toString(strs)); // [apple, banana, cherry]
// ====================== 6. 拼接与转换 ======================
System.out.println("\\n6. 拼接与转换:");
String sConcat1 = "Hello";
String sConcat2 = "Java";
System.out.println(" concat拼接:" + sConcat1.concat(" ").concat(sConcat2)); // "Hello Java"
// 类型转换
int num = 123;
boolean flag = true;
System.out.println(" int转String:" + String.valueOf(num)); // "123"
System.out.println(" boolean转String:" + String.valueOf(flag)); // "true"
// 集合/数组拼接
String[] arrJoin = {"x", "y", "z"};
System.out.println(" 数组逗号拼接:" + String.join(",", arrJoin)); // "x,y,z"
String[] listJoin = {"a", "b", "c"};
System.out.println(" 数组箭头拼接:" + String.join("->", listJoin)); // "a->b->c"
上述内容也同步在我的飞书,欢迎访问
https://my.feishu.cn/wiki/QLauws6lWif1pnkhB8IcAvkhncc?from=from_copylink
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,你们的支持就是我坚持下去的动力!



