Java 常用工具包 java.util

文章目录

java.util 是 Java 开发中非常基础、也非常实用的工具包。

如果是日常业务开发,重点掌握下面这些就够用了:

学习这些类时,不需要死记硬背每一个方法,而是要记住它们解决什么问题:

复制代码
List:存列表
Set:做去重
Map:存键值对
Collections:操作集合
Arrays:操作数组
Optional:处理空值
Stream:处理集合数据
Objects:判空和比较
UUID:生成唯一标识
Scanner:读取输入

掌握这些内容后,基本就能覆盖大部分 Java 日常开发场景。

在 Java 开发中,java.util 是一个非常常用的基础包。平时写业务代码时,经常会用到 ListMapSetCollectionsArraysOptionalStreamObjects 等工具。

这篇文章不做大而全的介绍,只整理开发中最常用、最实用的几个部分。


一、List:存储一组有顺序的数据

List 的特点是:有序、可重复。

实际开发中最常用的是 ArrayList

java 复制代码
import java.util.ArrayList;
import java.util.List;

public class ListDemo {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();

        names.add("张三");
        names.add("李四");
        names.add("王五");

        System.out.println(names.get(0));

        for (String name : names) {
            System.out.println(name);
        }
    }
}

常见场景:

复制代码
用户列表
商品列表
查询结果列表
表格数据列表

一般情况下,列表数据优先使用:

java 复制代码
List<T> list = new ArrayList<>();

二、Set:去重

Set 的特点是:元素不能重复。

常用实现类:

复制代码
HashSet:不保证顺序,适合快速去重
LinkedHashSet:保留插入顺序
TreeSet:自动排序

示例:

java 复制代码
import java.util.HashSet;
import java.util.Set;

public class SetDemo {
    public static void main(String[] args) {
        Set<String> tags = new HashSet<>();

        tags.add("Java");
        tags.add("Spring Boot");
        tags.add("Java");

        System.out.println(tags);
    }
}

Set 最常见的用途就是去重:

java 复制代码
List<String> list = List.of("Java", "MySQL", "Java", "Redis");

Set<String> set = new HashSet<>(list);

System.out.println(set);

三、Map:键值对存储

Map 用来保存 key-value 结构。

实际开发中最常用的是 HashMap

java 复制代码
import java.util.HashMap;
import java.util.Map;

public class MapDemo {
    public static void main(String[] args) {
        Map<Long, String> userMap = new HashMap<>();

        userMap.put(1L, "张三");
        userMap.put(2L, "李四");

        System.out.println(userMap.get(1L));
    }
}

常见场景:

复制代码
用户ID -> 用户信息
商品ID -> 商品详情
配置名称 -> 配置值
分类ID -> 分类名称

遍历 Map

java 复制代码
userMap.forEach((id, name) -> {
    System.out.println(id + ":" + name);
});

如果是在多线程场景下,可以考虑使用:

java 复制代码
ConcurrentHashMap<K, V>

四、Collections:集合工具类

Collections 是专门操作集合的工具类。

常用方法:

java 复制代码
List<Integer> numbers = new ArrayList<>();

numbers.add(3);
numbers.add(1);
numbers.add(2);

Collections.sort(numbers);     // 排序
Collections.reverse(numbers);  // 反转
Collections.shuffle(numbers);  // 打乱

获取最大值、最小值:

java 复制代码
Integer max = Collections.max(numbers);
Integer min = Collections.min(numbers);

常见使用场景:

复制代码
列表排序
数据反转
随机打乱
获取最大值和最小值

五、Arrays:数组工具类

Arrays 用来操作数组。

java 复制代码
import java.util.Arrays;

public class ArraysDemo {
    public static void main(String[] args) {
        int[] nums = {3, 1, 2};

        Arrays.sort(nums);

        System.out.println(Arrays.toString(nums));
    }
}

数组转 List:

java 复制代码
String[] arr = {"Java", "MySQL", "Redis"};

List<String> list = Arrays.asList(arr);

需要注意,Arrays.asList() 返回的是固定长度列表,不能直接新增或删除元素。

错误示例:

java 复制代码
List<String> list = Arrays.asList("Java", "MySQL");
list.add("Redis"); // 报错

如果需要可修改列表,可以这样写:

java 复制代码
List<String> list = new ArrayList<>(Arrays.asList("Java", "MySQL"));
list.add("Redis");

六、Optional:处理可能为空的值

Optional 可以用来表示一个值可能存在,也可能不存在。

传统写法:

java 复制代码
String name = getName();

if (name != null) {
    System.out.println(name);
}

使用 Optional

java 复制代码
Optional<String> optionalName = Optional.ofNullable(getName());

optionalName.ifPresent(name -> {
    System.out.println(name);
});

设置默认值:

java 复制代码
String name = Optional.ofNullable(getName())
        .orElse("默认名称");

实际开发中,Optional 比较适合作为方法返回值:

java 复制代码
public Optional<User> findUserById(Long id) {
    return Optional.empty();
}

它可以让调用方明确知道:这个结果可能不存在。


七、Stream:处理集合数据

Stream 常用于对集合进行筛选、转换、排序、分组等操作。

1. 过滤数据

java 复制代码
List<Integer> numbers = List.of(1, 2, 3, 4, 5);

List<Integer> result = numbers.stream()
        .filter(num -> num > 3)
        .toList();

System.out.println(result);

2. 转换数据

java 复制代码
List<String> names = List.of("java", "mysql", "redis");

List<String> result = names.stream()
        .map(String::toUpperCase)
        .toList();

System.out.println(result);

3. 分组

java 复制代码
Map<String, List<User>> groupMap = users.stream()
        .collect(Collectors.groupingBy(User::getCity));

Stream 适合处理简单的数据转换逻辑。如果逻辑很复杂,普通 for 循环反而更清晰。


八、Objects:对象工具类

Objects 常用于判空和安全比较。

java 复制代码
import java.util.Objects;

String name = null;

System.out.println(Objects.isNull(name));
System.out.println(Objects.nonNull(name));

安全比较两个对象:

java 复制代码
String a = null;
String b = "Java";

System.out.println(Objects.equals(a, b));

相比直接写:

java 复制代码
a.equals(b);

Objects.equals(a, b) 更安全,因为不会因为 anull 而抛出空指针异常。


九、UUID:生成唯一标识

UUID 可以生成一个随机唯一标识。

java 复制代码
import java.util.UUID;

public class UUIDDemo {
    public static void main(String[] args) {
        String id = UUID.randomUUID().toString();

        System.out.println(id);
    }
}

去掉横线:

java 复制代码
String id = UUID.randomUUID().toString().replace("-", "");

常见场景:

复制代码
文件名
临时编号
请求追踪ID
测试数据ID

十、Scanner:读取控制台输入

Scanner 常用于控制台输入,在刷算法题时比较常见。

java 复制代码
import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String name = scanner.nextLine();
        int age = scanner.nextInt();

        System.out.println(name);
        System.out.println(age);
    }
}

常用方法:

复制代码
next():读取一个单词
nextLine():读取一整行
nextInt():读取 int
nextLong():读取 long
nextDouble():读取 double

不过如果输入量很大,Scanner 性能一般,可以考虑使用 BufferedReader


十一、常用类总结

类或接口 作用 常见场景
ArrayList 有序列表 存储列表数据
HashSet 去重集合 数据去重
HashMap 键值对 根据 key 查找 value
Collections 集合工具类 排序、反转、打乱
Arrays 数组工具类 数组排序、数组转 List
Optional 空值处理 避免直接返回 null
Stream 流式处理 筛选、转换、分组
Objects 对象工具类 判空、安全比较
UUID 唯一标识 文件名、追踪 ID
Scanner 控制台输入 算法题、简单输入

相关推荐
枫叶丹41 小时前
【HarmonyOS 6.0】MDM Kit 新特性:PC/2in1设备无锁屏密码重启自动解锁能力详解
开发语言·华为·harmonyos
无为之士1 小时前
Windows 批量打印 PDF 工具分享:支持文件夹、指定文件、当天文件、预览列表
windows·powershell
ywl4708120871 小时前
springSecurity+jwt,简单版demo
java·前端·servlet
ZHW_AI课题组1 小时前
Python 调用百度智能云 API 实现地址识别
开发语言·人工智能·python·机器学习·百度·数据挖掘
SXJR1 小时前
spring boot + langchain4j +milvus实现向量存储
java·spring boot·后端·大模型·milvus·rag·langchain4j
武子康2 小时前
Java-27 深入浅出 Spring - 实现简易Ioc-03 在上节的业务下手动实现IoC 从 XML 配置到 BeanFactory 反射注入
java·后端·mybatis
88号技师2 小时前
2026年2月一区SCI-交叉传播优化算法Propagation Alongside Crossover-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
二哈赛车手2 小时前
新人笔记---idea索引失效问题解决方案
java·笔记·spring·elasticsearch·intellij-idea
A.零点2 小时前
【2个月 C 语言从入门到精通:零基础系统教程】第十二讲:深入了解指针(五)
c语言·开发语言·网络·笔记·visual studio