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

相关推荐
旖-旎2 小时前
链表(两两交换链表中的节点)(2)
数据结构·c++·学习·算法·链表·力控
赫瑞2 小时前
Java中的日期类
java·开发语言
XWalnut2 小时前
LeetCode刷题 day8
算法·leetcode·职场和发展
程序员木圭2 小时前
07-数组入门必看!Java数组的内存分析02
java·后端
前端技术2 小时前
ArkTS第三章:声明式UI开发实战
java·前端·人工智能·python·华为·鸿蒙
带刺的坐椅2 小时前
RFC 9535:JSONPath 的标准化之路
java·json·jsonpath·snack4·rfc9535
神の愛2 小时前
java日志功能
java·开发语言·前端
却话巴山夜雨时i2 小时前
互联网大厂Java面试:从Spring到微服务的全栈挑战
java·spring boot·redis·微服务·面试·kafka·技术栈
-SGlow-2 小时前
Linux相关概念和易错知识点(51)(mmap文件映射、共享内存原理、malloc的原理)
linux·c语言·算法·内核