欢迎光临
我们一直在努力

【LeetCode | 常用函数】Set类 HashMap类 String类

目录

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

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,你们的支持就是我坚持下去的动力!

赞(0)
未经允许不得转载:171主机测评 » 【LeetCode | 常用函数】Set类 HashMap类 String类
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址