java内置方法总结及基础算法

1. 字符串操作 (String)

方法 说明 示例
获取信息
length() 返回长度 "abc".length() → 3
charAt(i) 获取字符 "abc".charAt(1) → 'b'
indexOf(str) 查找位置 "hello".indexOf("ll") → 2
检查
contains(str) 是否包含 "abc".contains("b") → true
isEmpty() 是否为空 "".isEmpty() → true
startsWith(str) 是否以...开头 "abc".startsWith("ab") → true
endsWith(str) 是否以...结尾 "abc".endsWith("bc") → true
转换
toUpperCase() 转大写 "abc".toUpperCase() → "ABC
toLowerCase() 转小写 "ABC".toLowerCase() → "abc"
trim() 去首尾空格 " a ".trim() → "a"
toCharArray() 转字符数组 "ab".toCharArray() -> 'a' , 'b'
操作
substring(begin, end) 截取子串 "hello".substring(1,4) → "ell"
concat 连接 "a".concat("b") -> "ab"
replace(old, new) 替换 "aab".replace("a","b") → "bbb"
replaceAll(regex, new) 正则替换 "a1b2".replaceAll("\d","") → "ab"
split(regex) 分割 "a,b,c".split(",") → "a","b","c"
join(delim, arr) 拼接 String.join("-","a","b") → "a-b"
其他
isBlank() (Java 11+) 是否空白 " ".isBlank() → true
valueOf(obj) 转字符串 String.valueOf(123) → "123"

常用正则表达式( replaceAll( ) )

需求 正则
所有数字 \\d
非数字 \\D
字母 a-zA-Z+
字母数字 \\w+
空白符 \\s+
中文 \\u4e00-\\u9fa5+
量词 含义 示例 匹配
+ 1次或多次(连续) \\d+ 123、5、999
* 0次或多次 \\d* ""、123
? 0次或1次 \\d? ""、5

2. StringBuilder / StringBuffer

方法 说明 示例
增加
append(str) 追加 sb.append("abc")
insert(idx, str) 插入 sb.insert(2, "x")
删除
delete(start, end) 删除区间字符[ ) sb.delete(1, 3)
deleteCharAt(idx) 删除字符 sb.deleteCharAt(0)
修改
replace(start, end, str) 替换区间字符 sb.replace(1,3,"xx")
reverse() 反转 sb.reverse()
setCharAt(i, c) 设置指定位置字符 sb.setCharAt(0,'A')
查询
charAt(i) 获取字符 sb.charAt(2)
length() 长度 sb.length()
toString() 转字符串 sb.toString()
indexOf(str) 查找位置 sb.indexOf("ab)
substring(begin, end) 截取子串 "hello".substring(1,4) → "ell"

3. 数学运算 (Math)

方法 说明 示例
abs(x) 绝对值 Math.abs(-5) → 5
max(a,b) 最大值 Math.max(3,5) → 5
min(a,b) 最小值 Math.min(3,5) → 3
pow(a,b) 幂运算 Math.pow(2,3) → 8.0
sqrt(x) 平方根 Math.sqrt(16) → 4.0
cbrt(x) 立方根 Math.cbrt(27) → 3.0
ceil(x) 向上取整 Math.ceil(3.2) → 4.0
floor(x) 向下取整 Math.floor(3.8) → 3.0
round(x) 四舍五入 Math.round(3.5) → 4
random() 随机数 [0,1) Math.random()
sin/cos/tan 三角函数 Math.sin(Math.PI/2) → 1.0
toRadians(deg) 角度转弧度 Math.toRadians(180) → π
toDegrees(rad) 弧度转角度 Math.toDegrees(π) → 180

4. 数组操作 (Arrays)

方法 说明 示例
sort(arr) 排序 Arrays.sort(arr)
binarySearch(arr, key) 二分查找 Arrays.binarySearch(arr, 5)
toString(arr) 转字符串 Arrays.toString(arr)
deepToString(arr) 二维数组转字符串 Arrays.deepToString(matrix)
fill(arr, val) 填充 Arrays.fill(arr, 0)
copyOf(arr, len) 复制 Arrays.copyOf(arr, 10)
copyOfRange(arr, from, to) 复制范围 Arrays.copyOfRange(arr,1,5)
equals(a,b) 比较 Arrays.equals(arr1, arr2)
asList(arr) 转 List Arrays.asList("a","b")

5. 集合操作 (Collections)

方法 说明 示例
sort(list) 排序 Collections.sort(list)
reverse(list) 反转 Collections.reverse(list)
max(list) 最大值 Collections.max(list)
min(list) 最小值 Collections.min(list)
binarySearch(list, key) 二分查找 Collections.binarySearch(list,5)
frequency(list, obj) 出现次数 Collections.frequency(list,"a")
swap(list, i, j) 交换 Collections.swap(list,0,1)
fill(list, obj) 填充 Collections.fill(list,0)
replaceAll(list, old, new) 替换 Collections.replaceAll(list,0,1)

6. 字符判断 (Character)

方法 说明 示例
isDigit(c ) 是否数字 Character.isDigit('5') → true
isLetter(c ) 是否字母 Character.isLetter('a') → true
isLetterOrDigit(c ) 是否字母或数字 Character.isLetterOrDigit('a') → true
isUpperCase( c) 是否大写 Character.isUpperCase('A') → true
isLowerCase( c) 是否小写 Character.isLowerCase('a') → true
toUpperCase( c) 转大写 Character.toUpperCase('a') → 'A'
toLowerCase( c) 转小写 Character.toLowerCase('A') → 'a'

7. 整数操作 (Integer)

方法 说明 示例
parseInt(s) 字符串转 int Integer.parseInt("123") → 123
parseInt(s, radix) 指定进制 Integer.parseInt("ff",16) → 255
toString(n) int 转字符串 Integer.toString(123) → "123"
toString(n, radix) 指定进制 Integer.toString(255,16) → "ff"
bitCount(n) 二进制中1的个数 Integer.bitCount(5) → 2
reverse(n) 二进制反转 Integer.reverse(1) → -2147483648
max(a,b) 最大值 Integer.max(3,5) → 5
min(a,b) 最小值 Integer.min(3,5) → 3
sum(a,b) 求和 Integer.sum(3,5) → 8
compare(a,b) 比较 Integer.compare(3,5) → -1

8.常用工具方法速查

需求 方法
字符串转 int Integer.parseInt(s)
int 转字符串 String.valueOf(n) 或 Integer.toString(n)
字符串转数组 s.toCharArray()
数组转字符串 new String(arr) 或 Arrays.toString(arr)
比较字符串 a.equals(b)(不要用 ==)
忽略大小写比较 a.equalsIgnoreCase(b)
判断是否为空 s == null
判断是否空白 s == null
随机数 (int)(Math.random() * 100) 或 new Random().nextInt(100)
深拷贝数组 arr.clone() 或 Arrays.copyOf(arr, arr.length)
数组转 List Arrays.asList(arr)
List 转数组 list.toArray(new String0)

9.常用正则表达式

需求 正则
数字 \d+
字母 a-zA-Z+
字母数字 \w+
空白符 \s+
中文 \\u4e00-\\u9fa5+

10.集合

List集合(有序,可重复)

声明: List<数据类型> list =new ArrayList<>();

Set集合(无序,不重复)(HashSet去重)

声明: Set<数据类型> set = new HashSet<>();

Map集合

声明: Map< K V> map = new HashMap<>();

map.put(K key,V value); 将指定的键和值关联起来,若键已存在则替换旧值

排序

数组

升序:Arrays.sort(arr);

降序:Arrays.sort(arr, (o1,o2)->o2-o1);

List集合

升序:Collections.sort(list);

降序:Collections.sort(list, Collections.reverseOrder());

整数降序:list.sort((a, b) -> b - a);

字符串降序:

java 复制代码
List<String> list = new ArrayList<>(Arrays.asList("banana", "apple", "cherry", "date"));

// 字典序降序
list.sort((a, b) -> b.compareTo(a));
System.out.println(list);  // [date, cherry, banana, apple]

// 按长度降序
list.sort((a, b) -> b.length() - a.length());
System.out.println(list);  // [banana, cherry, apple, date]

11.栈和队列

栈直接用Deque 实现栈(效率更高)

声明:Deque<引用数据类型> deque = new ArrayDeque<>();

如果要查找元素位置直接遍历查找

队列

Queue 接口(LinkedList 实现)

声明:Queue<引用数据类型> queue = new LinkedList<>();


双端队列 Deque

声明:Deque deque = new ArrayDeque<>();


优先级队列 PriorityQueue

默认最小堆(升序)

PriorityQueue< Integer> pq = new PriorityQueue<>();

最大堆(降序):

PriorityQueue< Integer> pq = new PriorityQueue<>((a, b) -> b - a);

基本方法和Deque(栈)相同

前缀和

一维前缀和

java 复制代码
// 构建前缀和数组(多开一个位置,方便处理边界)
			 int[] arr = new int[n]; //原数组从0开始
        int[] prefix = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            prefix[i] = prefix[i - 1] + arr[i - 1];
        }

// 查询区间和 [l, r](0-based 索引)
        int sum = prefix[r + 1] - prefix[l];

二维前缀和

模板:

java 复制代码
			 int[][] arr = new int[n][m];
        int[][] sum = new int[n + 1][m + 1];
        // 构建前缀和
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                sum[i][j] = arr[i-1][j-1] 
               			 + sum[i-1][j] 
               			 + sum[i][j-1] 
               			 - sum[i-1][j-1];
            }

// 查询 (x1, y1) 到 (x2, y2) 的子矩阵和
public static int query(int[][] sum, int x1, int y1, int x2, int y2) {
    // 注意:如果使用 1-based 索引,直接使用
    return sum[x2][y2] 
         - sum[x1-1][y2] 
         - sum[x2][y1-1] 
         + sum[x1-1][y1-1];
}

差分

模板:

java 复制代码
public class Difference {
    public static void main(String[] args) {
        int[] arr = {2, 5, 3, 7, 4};
        int n = arr.length;
        
        // 1. 构建差分数组
        int[] diff = new int[n + 1];  // 多开一个位置,防止 r+1 越界
        diff[0] = arr[0];
        for (int i = 1; i < n; i++) {
            diff[i] = arr[i] - arr[i - 1];
        }
        //[2 , 3 , -2 , 4 , -3]
        
        // 2. 区间操作:将 [1, 3] 的元素加 10
        int l = 1, r = 3, x = 10;
        diff[l] += x;
        diff[r + 1] -= x;
        //[2 , 13 , -2 , 4 , -13]
         
        // 3. 从差分还原原数组(前缀和)
        int[] newArr = new int[n];
        newArr[0] = diff[0];
        for (int i = 1; i < n; i++) {
            newArr[i] = newArr[i - 1] + diff[i];
        }
        
        // 输出结果
        System.out.println("原数组: " + Arrays.toString(arr));
        System.out.println("操作后: " + Arrays.toString(newArr));
        // 原数组: [2, 5, 3, 7, 4]
        // 操作后: [2, 15, 13, 17, 4]  ← 索引1-3都加了10
    }
}

注意!!!

1.若读取数字之后要读取一整行字符串

那么用Integer.parseInt(sc.nextLine());读取数字

sc.nextLine();读取一整行字符串

相关推荐
小欣加油3 小时前
leetcode56 合并区间
c++·算法·leetcode·职场和发展
lqqjuly3 小时前
前沿算法深度解析(二)
人工智能·算法·机器学习
wang09073 小时前
自己动手写一个spring之IOC_2
java·后端·spring
来杯@Java3 小时前
学生选课管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·maven·mybatis
徐小夕4 小时前
万字长文!千万级文档 RAG 知识库系统落地实践
前端·算法·github
不知名的老吴4 小时前
线程的生命周期之线程“插队“
java·开发语言·python
akunkuntaimei4 小时前
2026年高考数学各省真题及答案(完整版)
算法·高考
ANnianStriver5 小时前
PetLumina-02-后端开发与前后端联调
java·ai·sa-token
Hello:CodeWorld5 小时前
C 风格变参 vs C++ 变参模板:核心区别与选型指南
c语言·c++·算法