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 String[0])

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();读取一整行字符串

相关推荐
小怪吴吴9 分钟前
idea 开发Android
android·java·intellij-idea
嘻嘻哈哈樱桃11 分钟前
牛客经典101题题解集--动态规划
java·数据结构·python·算法·职场和发展·动态规划
一次旅行13 分钟前
IDEA安装CC GUI新手指南
java·ide·intellij-idea
超梦dasgg17 分钟前
Spring AI 智能航空助手项目实战
java·人工智能·后端·spring·ai编程
脱氧核糖核酸__27 分钟前
LeetCode热题100——234.回文链表(两种解法)
c++·算法·leetcode·链表
IronMurphy27 分钟前
【算法四十二】118. 杨辉三角 198. 打家劫舍
算法
电科一班林耿超32 分钟前
第 16 课:动态规划专题(二)—— 子序列与子数组问题:面试最高频的 DP 题型
数据结构·算法·动态规划
生信研究猿1 小时前
leetcode 416. 分割等和子集
算法·leetcode·职场和发展
狗哥哥1 小时前
面包屑自动推导的算法设计:从“最短路径匹配”到工程可落地
算法·架构
counting money1 小时前
Spring框架基础(配置篇)
java·后端·spring