java.util —— 工具类

本文深入探讨了Java中几种常用工具类的功能与应用,包括Random类的初始化方式、Arrays类的数组处理方法如fill()和copyOf()等,以及Vector类支持的枚举迭代特性和Calendar类日期操作的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工具类的存在,是为了平衡,Java 彻底的面向对象(everything is object. 的极端;),也即并非所有的东西都可抽象为类的,但又要有类的形式,工具类便由此诞生。

  • 工具类不做实例化,工具类中可调用的成员函数均为static,即通过工具类的类名即可访问;
  • 工具类的使用,避免了 new 操作,以及大量的实例化对象;

0. Random

  • private static Random rand = new Random(47);
    • rand 作为一个随机 index;(47 是该随机数的种子值)

1. java.util.Arrays

  • fill():数组填充;

    • 重载较多;
  • copyOf

    在实现 Stack 类时,每执行一次 push 的操作,需要首先判断当前所分配存储空间是否已经使用完备:

    private void ensureCapacity() {
    	if (size == elements.length) {
    		elements = Arrays.copyOf(elements, 2*size+1);
    	}
    }
    
  • asList

    List<Shape> shapeList = Arrays.asList(new Circle(), new Square(), new Triangle());
    

2. java.util.Vector

  • Vector 类的显著特性即是支持枚举(迭代);

    Vectot<ClassName> records = new Vector<>();
    Enumeration recordEnum = records.elements();
    while (recordEnum.hasMoreElements()) {
    	ClassName each = (ClassName)recordEnum.nextElement();
    }
    

    其中 Enumeration 是 java 内置接口:

    public interface Enumeration<E> {
        boolean hasMoreElements();
        E nextElement();
    }
    

3. Calendar

public boolean isBabyBoomer() {

  Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
  gmtCal.set(1946, Calendar.JANUARY, 1, 0, 0, 0);
  Date start =  gmtCal.getTime();
  gmtCal.set(1965, Calendar.JANUARY, 1, 0, 0, 0);
  Date end = gmtCal.getTime();

  return birthDate.compareTo(start) >= 0 && 
  birthDate.compareTo(end) < 0;
}
### Java `util.function` 包功能与使用教程 #### 1. 背景介绍 自 JDK 1.8 发布以来,Java 引入了 Lambda 表达式以及支持函数式编程的相关特性。为了更好地支持这些新特性和简化开发流程,Java 提供了一个新的包——`java.util.function`[^1]。 该包主要包含了各种用于函数式编程的基础接口,它们被设计成可以作为 lambda 表达式的靶向类型(target type),从而使得开发者能够更方便地编写简洁而高效的代码[^2]。 --- #### 2. 常见接口及其用途 以下是 `java.util.function` 中一些常用的函数式接口: ##### (1) **Function<T, R>** 表示接受一个参数并返回结果的函数。此接口的主要方法是 `apply(T t)`,它会应用给定的操作于输入对象,并返回计算后的结果[^3]。 ```java import java.util.function.Function; public class Example { public static void main(String[] args) { Function<String, Integer> stringLength = s -> s.length(); System.out.println(stringLength.apply("Hello")); // 输出: 5 } } ``` ##### (2) **Predicate<T>** 代表一种布尔值判断逻辑,通常用来测试某个条件是否满足。核心方法为 `test(T t)`,如果指定的对象符合内部定义的标准,则返回 true;否则 false。 ```java import java.util.function.Predicate; public class PredicateExample { public static void main(String[] args) { Predicate<Integer> isEven = n -> n % 2 == 0; System.out.println(isEven.test(4)); // 输出: true } } ``` ##### (3) **Consumer<T>** 执行只读操作而不改变数据本身的行为模式。典型的方法有 `accept(T t)` 和默认实现的 `andThen()` 方法来组合多个消费者实例一起工作。 ```java import java.util.function.Consumer; public class ConsumerExample { public static void main(String[] args) { Consumer<String> printer = str -> System.out.print(str); printer.accept("World "); // 输出: World } } ``` ##### (4) **Supplier<T>** 提供无参调用即可获取某种类型的实例化对象的方式。它的唯一抽象方法叫做 `get()`,没有任何形参列表却总是要产生一个新的 T 类型的结果。 ```java import java.util.Random; import java.util.function.Supplier; public class SupplierExample { public static void main(String[] args) { Supplier<Double> randomValueGenerator = () -> Math.random() * 100d; double value = randomValueGenerator.get(); System.out.printf("%.2f%n",value); // 随机数输出示例 } } ``` ##### (5) **BiFunction<T,U,R>** 类似于 Function 接口但是接收两个不同类型的参数而不是单一的一个。其 apply 方法签名变为 `(T t, U u)` 形式。 ```java import java.util.function.BiFunction; public class BiFunctionExample { public static void main(String[] args){ BiFunction<Integer,Integer,Integer> adder=(a,b)-> a+b ; int sum=adder.apply(7 ,9 ); System.out.println(sum );// 输出 :16 } } ``` --- #### 3. 如何解决找不到 `java.util.function.Function` 的问题? 当遇到 “无法访问 `java.util.function.Function` 找不到 `java.util.function.Function` 的类文件”的错误提示时,可能是因为当前项目的编译器设置不兼容 JDK 1.8 或更高版本所致。可以通过修改 Maven 构建工具中的配置文件(pom.xml) 来调整源码级别(source level) 及目标字节码等级(target bytecode version)[^4]: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> ``` --- #### 4. 总结 通过学习上述内容可知,`java.util.function` 是一个非常重要的库集合,极大地增强了 Java 对现代程序设计理念的支持程度。利用其中预置的各种功能性接口配合 lambdas 技术可以让我们的编码过程更加流畅自然. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值