背景

本文是《Java 后端从小白到大神》修仙系列第十四篇,正式进入Java后端世界,本篇文章主要聊Java基础。若想详细学习请点击首篇博文,我们开始把。

文章概览

  1. 常用工具类

常用工具类

1. Arrays

作用:提供对数组的静态工具方法,包括排序、搜索、填充、转换等。

常用方法

方法名 功能说明
sort(int[] a) 对数组进行自然顺序排序(升序)
binarySearch(int[] a, int key) 二分查找元素索引(需先排序)
fill(int[] a, int val) 将数组所有元素填充为指定值
copyOf(int[] a, int newLength) 复制数组到新长度(截断或补默认值)
equals(int[] a, int[] b) 比较两个数组是否内容相等
toString(int[] a) 返回数组的字符串表示(如 [1, 2, 3]
asList(T... a) 将数组转换为固定大小的 List
stream(int[] a) 将数组转换为 IntStream(Java 8+)

代码示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.Arrays;

int[] arr = {5, 3, 1, 4, 2};

// 1. 排序
Arrays.sort(arr); // [1, 2, 3, 4, 5]

// 2. 二分查找(需先排序)
int index = Arrays.binarySearch(arr, 4); // 3

// 3. 填充
Arrays.fill(arr, 0); // [0, 0, 0, 0, 0]

// 4. 复制数组
int[] newArr = Arrays.copyOf(arr, 3); // [0, 0, 0]

// 5. 比较数组
boolean isEqual = Arrays.equals(arr, newArr); // false

// 6. 转换为字符串
String arrStr = Arrays.toString(arr); // "[0, 0, 0, 0, 0]"

// 7. 数组转 List(注意:返回的是固定大小的列表)
List<Integer> list = Arrays.asList(1, 2, 3); 

// 8. 使用 Stream 处理数组
int sum = Arrays.stream(arr).sum(); // 15

2. Collections

作用:提供对集合(如 ListSetMap)的静态工具方法。

常用方法

方法名 功能说明
sort(List<T> list) 对列表进行自然顺序排序
reverse(List<?> list) 反转列表元素顺序
binarySearch(List<T> list, T key) 二分查找元素索引(需先排序)
shuffle(List<?> list) 随机打乱列表元素顺序
max(Collection<T> coll) 返回集合中的最大元素

代码示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import java.util.*;

List<Integer> list = new ArrayList<>(Arrays.asList(3, 1, 4, 1, 5));

// 排序
Collections.sort(list); // [1, 1, 3, 4, 5]

// 反转
Collections.reverse(list); // [5, 4, 3, 1, 1]

// 查找最大元素
int max = Collections.max(list); // 5

// 随机打乱
Collections.shuffle(list); // 随机顺序

2. Objects

作用:提供对象判空、哈希计算、比较等工具方法。

常用方法

方法名 功能说明
equals(Object a, Object b) 安全比较两个对象是否相等
hash(Object... values) 生成对象的哈希码
requireNonNull(T obj) 检查对象非空(否则抛异常)
toString(Object o) 安全返回对象的字符串表示

代码示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import java.util.Objects;

String str1 = null;
String str2 = "Hello";

// 安全比较
boolean isEqual = Objects.equals(str1, str2); // false

// 检查非空
String name = Objects.requireNonNull(str2, "Name 不能为 null");

// 生成哈希码
int hash = Objects.hash("Java", 8); // 组合哈希值

3. FilesPaths 类(NIO)

作用:用于文件读写和路径操作(Java 7+)。

常用方法

方法名(Files 功能说明
readAllBytes(Path path) 读取文件全部字节
write(Path path, byte[] data) 写入字节到文件
copy(Path src, Path dest) 复制文件
exists(Path path) 检查文件是否存在
createDirectory(Path dir) 创建目录

代码示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import java.nio.file.*;
import java.io.IOException;

Path path = Paths.get("test.txt");

// 写入文件
Files.write(path, "Hello Java".getBytes());

// 读取文件
byte[] data = Files.readAllBytes(path); // "Hello Java"

// 检查文件是否存在
boolean exists = Files.exists(path); // true

4. Math

作用:提供数学计算相关的静态方法。

常用方法

方法名 功能说明
max(int a, int b) 返回两个数的较大值
min(int a, int b) 返回两个数的较小值
abs(int a) 返回绝对值
sqrt(double a) 返回平方根
pow(double a, double b) 返回 ab 次幂

代码示例

1
2
3
int max = Math.max(10, 20); // 20
double sqrt = Math.sqrt(25); // 5.0
double power = Math.pow(2, 3); // 8.0

5. Stream 相关方法

作用:通过 Stream API 对集合进行链式操作(Java 8+)。

常用方法

方法名 功能说明
filter(Predicate<T> p) 过滤元素
map(Function<T, R> f) 转换元素
sorted() 排序元素
collect(Collectors.toList()) 将流转换为集合

一些常见的 Java 集合框架中的类支持 Stream API

描述
List 有序集合,允许重复元素。例如:ArrayList、LinkedList。
Set 不允许重复元素的集合。例如:HashSet、TreeSet、LinkedHashSet。
Map 键值对集合。虽然 Map 本身不直接支持 stream(),但可以通过 entrySet()、keySet() 或 values() 方法获取流。
Queue 先进先出(FIFO)队列。例如:PriorityQueue、ArrayDeque。
Deque 双端队列。例如:ArrayDeque、LinkedList。

代码示例

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
// List
public class CollectionStreamExample {
    public static void main(String[] args) {
        // List
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        list.stream().forEach(System.out::println);

        // Set
        Set<Integer> set = new HashSet<>(list);
        set.stream().forEach(System.out::println);

        // Map
        Map<String, Integer> map = Map.of("One", 1, "Two", 2, "Three", 3);
        map.entrySet().stream().forEach(entry -> System.out.println(entry.getKey() + ": " + entry.getValue()));
    }
}

// 数组
public class ArrayStreamExample {
    public static void main(String[] args) {
        // int[] 数组
        int[] intArray = {1, 2, 3, 4, 5};
        Arrays.stream(intArray).forEach(System.out::println);

        // String[] 数组
        String[] stringArray = {"Apple", "Banana", "Orange"};
        Stream.of(stringArray).forEach(System.out::println);
    }
}

// 文件 I/O
public class FileStreamExample {
    public static void main(String[] args) {
        try (Stream<String> lines = Files.lines(Paths.get("example.txt"))) {
            lines.forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// ConcurrentHashMap 和 CopyOnWriteArrayList
public class ConcurrentStreamExample {
    public static void main(String[] args) {
        // ConcurrentHashMap
        ConcurrentHashMap<String, Integer> concurrentMap = new ConcurrentHashMap<>();
        concurrentMap.put("One", 1);
        concurrentMap.put("Two", 2);
        concurrentMap.put("Three", 3);
        concurrentMap.entrySet().stream().forEach(entry -> System.out.println(entry.getKey() + ": " + entry.getValue()));

        // CopyOnWriteArrayList
        CopyOnWriteArrayList<String> copyOnWriteList = new CopyOnWriteArrayList<>();
        copyOnWriteList.add("Apple");
        copyOnWriteList.add("Banana");
        copyOnWriteList.add("Orange");
        copyOnWriteList.stream().forEach(System.out::println);
    }
}

// String 本身不是集合,但它提供了 chars() 和 codePoints() 方法来生成字符或 Unicode 码点的
// Random.ints()、Random.longs() 和 Random.doubles() 方法可以生成无限流
public class OtherStreamExample {
    public static void main(String[] args) {
        // String
        String str = "Hello, World!";
        str.chars().mapToObj(c -> String.valueOf((char) c)).forEach(System.out::print);
        System.out.println();

        // Random
        Random random = new Random();
        random.ints(5, 1, 100).forEach(System.out::println);
    }
}

// 自定义对象支持Stream API
class CustomObject {
    private final int value;

    public CustomObject(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    @Override
    public String toString() {
        return "CustomObject{" + "value=" + value + '}';
    }

    public static Stream<CustomObject> stream(List<CustomObject> objects) {
        Spliterator<CustomObject> spliterator = Spliterators.spliterator(objects, Spliterator.ORDERED);
        return StreamSupport.stream(spliterator, false);
    }
}

public class CustomObjectStreamExample {
    public static void main(String[] args) {
        List<CustomObject> customObjects = Arrays.asList(new CustomObject(1), new CustomObject(2), new CustomObject(3));
        CustomObject.stream(customObjects).forEach(System.out::println);
    }
}

6. StringUtils(Apache Commons Lang 库)

作用:第三方库提供的字符串工具类(需引入依赖)。

常用方法

方法名 功能说明
isEmpty(String str) 判断字符串是否为空或 null
join(Iterable<?> iterable) 将集合元素拼接为字符串
substring(String str, int start) 安全截取子字符串

代码示例

1
2
3
4
5
6
7
import org.apache.commons.lang3.StringUtils;

String str = null;
boolean empty = StringUtils.isEmpty(str); // true

List<String> list = Arrays.asList("A", "B", "C");
String joined = StringUtils.join(list, ","); // "A,B,C"
类名 核心用途 典型场景
Collections 集合操作(排序、查找等) 处理 ListSet 的复杂操作
Objects 对象安全操作 避免空指针异常
Files/Paths 文件读写 文件内容管理
Math 数学计算 数值计算
Stream 链式集合处理 数据过滤、转换、统计

通过这些工具类,可以显著简化代码并提高开发效率!

总结

  • 集合框架中的类:如 List、Set、Map 等都支持 Stream API。
  • 数组:可以通过 Arrays.stream() 或 Stream.of() 转换为流。
  • 文件 I/O:Files.lines() 可以从文件中读取行并返回流。
  • 并发工具类:如 ConcurrentHashMap 和 CopyOnWriteArrayList 支持 Stream API。
  • 其他类:如 String 和 Random 提供了特定方法生成流。
  • 自定义对象:可以通过实现 Spliterator 接口支持 Stream API。