一、前言

Java 的标准类库是开发的 “武器库”,从字符串处理、正则表达式,到包装类、系统工具类,再到日期时间、随机数、集合框架,这些工具类覆盖了日常开发 90% 的基础场景。本章我们系统梳理这些核心类库,帮你打通 Java 基础工具的任督二脉。


二、正则表达式:文本匹配的利器

1. 核心用法

Java 中使用PatternMatcher类实现正则匹配,步骤如下:

  1. 编译正则模式Pattern p = Pattern.compile("正则表达式");
  2. 创建匹配器Matcher m = p.matcher("待匹配字符串");
  3. 执行匹配boolean isMatch = m.matches();

2. 实战案例

  • 手机号校验:匹配以1开头,第二位为3/4/5,后接 9 位数字的手机号:

    java

    Pattern p = Pattern.compile("^1[3-5]+\\d{9}$");
    
  • IP 地址校验:匹配 IPv4 地址,每个段为0-255的数字:

    java

    Pattern p = Pattern.compile("([1-2]?\\d{0,2}\\.){3}[1-2]?\\d{0,2}");
    

三、数据类型包装器类:基本类型的对象化

1. 包装类与自动装箱 / 拆箱

Java 为 8 种基本类型提供了对应的包装类:

表格

基本类型 包装类
int Integer
char Character
boolean Boolean
byte Byte
short Short
long Long
float Float
double Double

自动装箱 / 拆箱:Java 会自动完成基本类型与包装类的转换:

java

Integer i = 123; // 自动装箱(int → Integer)
int j = i;       // 自动拆箱(Integer → int)

2. 常用方法

  • parseInt(String s):字符串转 int
  • toString():包装类转字符串
  • toBinaryString(int i):转二进制字符串
  • MAX_VALUE/MIN_VALUE:获取类型的最大 / 最小值

四、System 类:系统级工具集

1. 核心功能

  • 记录程序运行时间currentTimeMillis()获取当前毫秒数,计算代码段耗时:

    java

    long start = System.currentTimeMillis();
    // 执行代码
    long end = System.currentTimeMillis();
    System.out.println("耗时:" + (end - start) + "ms");
    
  • 数组复制arraycopy()实现数组高效拷贝:

    java

    System.arraycopy(src, srcPos, dest, destPos, length);
    
  • 标准输入 / 输出:System.in/System.out

五、Math 与 Random:数学计算与随机数

1. Math 类

提供常用数学静态方法:

  • 取整:ceil()向上取整、floor()向下取整、round()四舍五入
  • 三角函数:sin()/cos()/asin()
  • 指数对数:exp()/log()/pow()
  • 常量:Math.PI(圆周率)、Math.E(自然常数)
  • 随机数:Math.random()生成[0,1)的随机浮点数

2. Random 类

Math.random()更灵活的随机数工具:

java

Random r = new Random(202208); // 指定种子,相同种子生成相同序列
int num = r.nextInt(10);       // 生成[0,10)的随机整数
double gauss = r.nextGaussian(); // 高斯分布随机数

六、日期时间工具类

1. 旧版 Date 类

  • Date():创建当前时间对象
  • Date(long millis):根据毫秒数创建时间
  • 缺点:线程不安全、方法设计不友好

2. 新版java.time包(JDK8+)

  • LocalDateTime:本地日期时间,不含时区信息

    java

    LocalDateTime now = LocalDateTime.now(); // 获取当前时间
    LocalDateTime future = now.plusYears(30).plusDays(100); // 时间计算
    
  • ZonedDateTime:带时区的日期时间
  • DateTimeFormatter:日期格式化与解析

    java

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
    String formatTime = now.format(dtf); // 时间转字符串
    LocalDateTime parseTime = LocalDateTime.parse("2022年08月17日 13时54分39秒", dtf); // 字符串转时间
    
  • Instant:时间线上的瞬时点,用于DateLocalDateTime的转换

七、Java 集合框架:数据存储的瑞士军刀

1. 集合接口体系

  • Iterable:支持 for-each 循环,获取迭代器
  • Collection:集合根接口,定义add()/remove()/contains()等通用方法
  • List:有序、可重复集合(ArrayList/LinkedList/Vector/Stack
  • Set:无序、无重复集合(HashSet/TreeSet/LinkedHashSet
  • Queue:先进先出队列(ArrayDeque/PriorityQueue
  • Deque:双向队列,支持两端操作
  • Map:键值对集合(HashMap/TreeMap/Hashtable/Properties

2. List 接口实现类

  • ArrayList:动态数组,查询快、增删慢,非线程安全
  • LinkedList:双向链表,增删快、查询慢
  • Vector:线程安全的动态数组,性能略差
  • Stack:继承Vector,实现后进先出栈

3. Set 接口实现类

  • HashSet:哈希表实现,无序、无重复,允许 null 元素
  • TreeSet:红黑树实现,按自然顺序排序,支持lower()/higher()/pollFirst()等方法
  • LinkedHashSet:有序的 HashSet,保留插入顺序

4. Queue 与 Deque 接口

  • ArrayDeque:基于数组的双向队列,性能优于LinkedList

    java

    Deque<Character> deque = new ArrayDeque<>();
    deque.offerLast('A'); // 队尾添加
    deque.pollFirst();    // 队首取出
    deque.offerFirst('B');// 队首添加
    deque.pollLast();     // 队尾取出
    

5. Map 接口实现类

  • HashMap:哈希表实现,无序键值对,非线程安全
  • TreeMap:红黑树实现,按键升序排序
  • Hashtable:线程安全的哈希表,不允许 null 键 / 值
  • LinkedHashMap:有序的 HashMap,保留插入顺序

6. 迭代器与遍历

  • Iterator:单向遍历,支持hasNext()/next()/remove()
  • ListIterator:双向遍历,支持previous()/set()/add()

    java

    ListIterator<Character> litr = list.listIterator();
    while (litr.hasNext()) {
        char c = litr.next();
        litr.set(Character.toLowerCase(c)); // 修改元素
    }
    while (litr.hasPrevious()) {
        System.out.print(litr.previous() + " "); // 反向遍历
    }
    

八、学习总结

  1. 正则表达式:核心是Pattern+Matcher,用于文本匹配与校验。
  2. 包装类:实现基本类型的对象化,支持自动装箱 / 拆箱,提供类型转换方法。
  3. System 类:提供系统级工具,如时间计算、数组复制。
  4. Math/Random:数学计算与随机数生成,满足不同场景的随机需求。
  5. 日期时间:优先使用 JDK8 + 的java.time包,线程安全且 API 友好。
  6. 集合框架
    • List适合有序可重复数据,ArrayList优先使用;
    • Set适合去重场景,TreeSet支持排序;
    • Map适合键值对存储,HashMap是首选;
    • 迭代器是遍历集合的通用方式,ListIterator支持双向操作。

更多推荐