跳到主要内容Java 刷题常用集合类、函数及类型转换指南 | 极客日志Javajava算法
Java 刷题常用集合类、函数及类型转换指南
综述由AI生成总结了 Java 刷题中常用的集合类及其核心方法。涵盖 ArrayList、LinkedList、Stack、Queue、PriorityQueue、Set 和 Map 的创建、增删改查及遍历方式。详细介绍了 String 类的连接、比较、查找、替换与转换方法,以及 StringBuffer 和 StringBuilder 的区别。此外还包含 Math 类常用数学函数、Arrays 数组工具类操作(排序、复制、填充等)以及常见数据类型间的相互转换技巧,旨在帮助开发者快速查阅 API 并避免混淆。
信号故障27 浏览 Java 刷题常用集合类、函数及类型转换指南
前言
相信大家在刷算法题的过程中,好不容易想出来大概的思路,也知道去用哪个集合类,但各个集合类的一些命令都长得太像,很容易将他们弄错,并且在各集合之间的转化也是特别烦人,还有很多实用的函数都知道可以去用,但总是会忘记。
本篇将会把刷题中常见的,实用的集合类的功能和各类函数都将详细说明(后续遇到慢慢补充)。
集合类
ArrayList
1. 创建和初始化 ArrayList
ArrayList<Integer> list = new ArrayList<>();
默认容量为 10。
2. 添加元素 add
添加单个元素(常用):
list.add(1); list.add(2); list.add(3); list.add(4); list.add(5);
在指定位置添加元素:
list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(0, 10);
3. 获取元素 get
获取指定索引位置的元素:
list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); int element = list.get(1);
4. 删除元素 remove
boolean contains = list.contains(10);
list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.remove(0);
5. 检查元素
boolean contains = list.contains(10);
boolean isEmpty = list.isEmpty();
6. 遍历 ArrayList
for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i));
for (Integer num : list) { System.out.println(num); }
Iterator<Integer> iterator = list.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); }
LinkedList
LinkedList 和 ArrayList 命令上大体相同,他们都实现了 List 接口。
但 LinkedList 实现了 Queue 和 Deque 接口,可以用作队列(FIFO)和栈(LIFO)。
Stack
1. 创建 Stack 对象
用于创建一个新的栈,常用于存储数字、字符或其他对象。
Stack<Integer> stack = new Stack<>();
2. 压入元素 (push)
push(E item) 方法用于将元素推入栈顶。
stack.push(10); stack.push(20); stack.push(30);
3. 弹出元素 (pop)
pop() 方法用于移除并返回栈顶元素。如果栈为空,调用该方法会抛出 EmptyStackException 异常。需要注意栈为空时使用时需检查栈是否为空,避免异常。
int topElement = stack.pop();
4. 查看栈顶元素 (peek)
peek() 方法用于查看栈顶元素,但不会移除它。如果栈为空,同样会抛出 EmptyStackException 异常。
int topElement = stack.peek();
5. 检查栈是否为空 (empty)
empty() 方法返回 true 如果栈为空,false 如果栈不为空。这个方法在判断栈是否可以继续操作时非常有用。
boolean isEmpty = stack.empty();
Queue
1. 创建队列对象
Queue<Integer> queue = new LinkedList<>();
2. 添加元素 (add 和 offer)
3. 移除元素 (poll 和 remove)
int element = queue.poll();
4. 查看队列头部元素 (peek 和 element)
peek() 方法更常用,因为它更安全,不会抛出异常。
int element = queue.peek();
5. 队列大小 (size)
6. 检查队列是否为空 (isEmpty)
返回 true 如果队列为空,false 如果队列不为空。常用于循环前检查队列是否有元素。
boolean isEmpty = queue.isEmpty();
PriorityQueue
PriorityQueue 跟 Queue 命令大体相似,但它也是刷题中经常遇到的,因为它可以创建大小根堆。
大根堆(Max-Heap):每个父节点的值大于或等于其子节点的值,根节点为最大元素。小根堆(Min-Heap):每个父节点的值小于或等于其子节点的值,根节点为最小元素。
小根堆:
大根堆
Set
1. 创建 Set 实例
Set<Integer> set = new HashSet<>(); Set<Integer> linkedSet = new LinkedHashSet<>(); Set<Integer> treeSet = new TreeSet<>();
2. 添加元素
3. 删除元素
4. 检查是否包含某个元素
boolean contains = set.contains(3);
5. 获取集合的大小
6. 判断集合是否为空
boolean isEmpty = set.isEmpty();
7. 遍历
Iterator<Integer> iterator = set.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); }
for (Integer num : set) { System.out.println(num); }
8. Set 转换为 List
List<Integer> list = new ArrayList<>(set);
Map
1. 基本创建 Map
Map<K, V> map = new HashMap<>();
K 是键的类型,V 是值的类型。可以使用 HashMap、TreeMap、LinkedHashMap 等不同实现类。经常使用 HashMap 类,O(1)。
Map<Integer,Integer> map = new HashMap<>(); Map<Integer,Integer> map1 = new TreeMap<>(); Map<Integer,Integer> map2= new LinkedHashMap<>();
2. 插入/更新元素
3. 获取元素
V value = map.get(K key);
4. 检查键或值是否存在
boolean containsKey(Object key);
5. 删除元素
6. 获取键集合、值集合和键值对集合
Set<K> keySet = map.keySet();
Map<String,Integer> hash = new HashMap<>(); hash.put("hhh",1); hash.put("ggg",2); hash.put("www",3); Set<String> keySet = hash.keySet(); System.out.println(keySet); Collection<Integer> values = hash.values(); System.out.println(values); Set<Map.Entry<String, Integer>> entrySet = map.entrySet(); System.out.println(entrySet);
7. 遍历 Map
Map<String,Integer> hash = new HashMap<>(); hash.put("hhh",1); hash.put("ggg",2); hash.put("www",3);
8. 默认值处理
V value = map.getOrDefault(K key, V defaultValue);
String 类
1. 字符串连接
String.concat(String str)
将给定的字符串拼接到当前字符串的末尾。相当于 + 操作符,但效率较高。
String str = "Hello"; str = str.concat(" World");
2. 字符串比较
1) 判断当前字符串和指定字符串是否相等。比较的是字符序列是否相同。
String.equals(Object obj)
String str1 = "Hello"; String str2 = "hello"; boolean isEqual = str1.equals(str2);
String.equalsIgnoreCase(String anotherString)
String str1 = "Hello"; String str2 = "hello"; boolean isEqual = str1.equalsIgnoreCase(str2);
0 表示两个字符串相等;
< 0 表示当前字符串在字典序中小于给定字符串;
> 0 表示当前字符串在字典序中大于给定字符串。
String.compareTo(String anotherString)
String str1 = "apple"; String str2 = "banana"; int result = str1.compareTo(str2);
String str1 = "apple"; String str2 = "APPLE"; int result = str1.compareToIgnoreCase(str2);
3. 字符串查找
1) 返回指定子字符串首次出现的索引位置。如果没有找到,返回 -1。
String.indexOf(String str)
String str = "Hello, World!"; int index = str.indexOf("W");
String.lastIndexOf(String str)
String str = "aaaaabbbbba"; int index = str.lastIndexOf("a");
3) 判断当前字符串是否包含指定的子字符串,返回布尔值。
String.contains(CharSequence sequence)
String str = "Hello, World!"; boolean contains = str.contains("World");
String.startsWith(String prefix)
String str = "Hello"; boolean startsWith = str.startsWith("He");
String.endsWith(String suffix)
String str = "Hello"; boolean endsWith = str.endsWith("lo");
4. 字符串替换和修改
1) 替换字符串中的字符。返回一个新的字符串,原字符串不变。
String.replace(char oldChar, char newChar)
String str = "hello"; String newStr = str.replace('l', 'p');
String.substring(int beginIndex)
String str = "Hello World!"; String subStr = str.substring(6);
2)返回从 beginIndex 到 endIndex 之间的子字符串。
String.substring(int beginIndex, int endIndex)
String str = "Hello World!"; String subStr = str.substring(0, 5);
5. 字符串转换
String str = "HELLO"; String lowerStr = str.toLowerCase();
String str = "hello"; String upperStr = str.toUpperCase();
String str = " Hello World! "; String trimmedStr = str.trim();
4)将其他类型的数据(如 int、boolean、char 等)转换为字符串。
int num = 100; String str = String.valueOf(num);
6. 其他常用方法
String.split(String regex)
String str = "apple,banana,orange"; String[] arr = str.split(",");
2)将多个字符串连接成一个字符串,中间用指定的分隔符。
String.join(CharSequence delimiter, CharSequence... elements)
String result = String.join(",", "apple", "banana", "orange");
StringBuffer
1. 追加字符串:append
将指定的内容追加到 StringBuffer 末尾。
StringBuffer stringBuffer = new StringBuffer();
2. 插入字符串:insert
StringBuffer stringBuffer = new StringBuffer();
3. 删除字符串:delete 和 deleteCharAt
delete(start, end):删除从 start 到 end(不包括 end)的字符。
deleteCharAt(index):删除指定索引处的字符。
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("hello"); stringBuffer.deleteCharAt(stringBuffer.length()-1);
4. 反转字符串:reverse
stringBuffer.append("hello"); stringBuffer.reverse();
5. 转换为 String:toString
stringBuffer.append("hello"); String str = stringBuffer.toString();
StringBuilder(线程不安全)跟 StringBuffer(线程安全)类似,功能基本一致。
Math 类
返回参数的平方根。如果参数为负数,则返回 NaN。
返回最接近的整数(四舍五入),并将结果作为 long 类型返回。
返回大于或等于参数的最小整数值,结果是 double 类型。
计算 e 的 x 次方,等效于 Math.pow(Math.E, x)。
数组(Arrays)类
1. 数组的排序
int[] arr = {10,5,12,45,32,20,18}; Arrays.sort(arr); System.out.println(Arrays.toString(arr));
2) 用于自定义排序规则。适用于对象类型的数组 降序排序
Integer[] arr = {10,5,12,45,32,20,18}; Arrays.sort(arr,(a,b)-> b - a); System.out.println(Arrays.toString(arr));
2. 数组转化字符串
int[] arr = {1, 2, 3}; String str = Arrays.toString(arr);
Arrays.deepToString(array)
int[][] arr = {{1, 2}, {3, 4}}; String str = Arrays.deepToString(arr);
3. 数组复制
1) 创建一个新数组,包含原数组的前 newLength 个元素。如果新长度大于原数组长度,则新增元素会被填充为默认值(如 0)。
Arrays.copyOf(array, newLength)
int[] arr = {1, 2, 3}; int[] newArr = Arrays.copyOf(arr, 5);
2) 创建一个新数组,复制原数组指定范围的元素(from 包含,to 不包含)。
Arrays.copyOfRange(array, from, to)
int[] arr = {1, 2, 3, 4, 5}; int[] subArr = Arrays.copyOfRange(arr, 1, 4);
4. 数组填充
Arrays.fill(array, value)
int[] arr = new int[5]; Arrays.fill(arr, 7);
2) 将数组中从 fromIndex 到 toIndex 范围内的元素设置为指定值。
Arrays.fill(array, fromIndex, toIndex, value)
int[] arr = new int[5]; Arrays.fill(arr, 1, 4, 9);
5. 数组比较
判断两个数组是否相等。数组相等的标准是数组的长度相同且对应位置的元素相等。
Arrays.equals(array1, array2)
int[] arr1 = {1, 2, 3}; int[] arr2 = {1, 2, 3}; boolean isEqual = Arrays.equals(arr1, arr2);
其他操作
常见数据类型的最大值和最小值
Integer.MAX_VALUE / Integer.MIN_VALUE Long.MAX_VALUE / Long.MIN_VALUE Float.MAX_VALUE / Float.MIN_VALUE Double.MAX_VALUE / Double.MIN_VALUE
集合转化成数组
对于 List、Set 和 Queue,可以使用 toArray() 方法直接将其转换为数组。对于 Map,你可以选择将其键、值或条目转换为数组,使用 keySet()、values() 或 entrySet() 方法。
字符与字符串的转换
1)字符数组转字符串:String.valueOf() 或 String 构造函数。
char[] charArray = {'a', 'b', 'c'}; String str = new String(charArray);
2)字符串转字符:使用 charAt() 获取指定位置的字符。
String str = "hello"; char ch = str.charAt(0);
字符串和整型之间的转化
要将字符串转换为整型,可以使用 Integer.parseInt() 或 Integer.valueOf() 方法。
String str = "123"; int num = Integer.parseInt(str); System.out.println(num);
String str = "123"; int num = Integer.valueOf(str);
要将整型转换为字符串,可以使用 String.valueOf() 或 Integer.toString() 方法。
int num = 123; String str = String.valueOf(num); System.out.println(str);
int num = 123; String str = Integer.toString(num); System.out.println(str);
相关免费在线工具
- Keycode 信息
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
- Escape 与 Native 编解码
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
- JavaScript / HTML 格式化
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
- JavaScript 压缩与混淆
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online