其他常用类

Math类

Math 类位于 java.lang 包中,提供数学运算的静态方法

Math 类是 Java 中的一个工具类,提供了许多用于数学运算的静态方法。它包含常见的数学函数,如三角函数、指数函数、对数函数、取整函数、随机数生成等。Math 类的方法都是静态的,因此可以直接通过类名调用,无需创建 Math 类的实例

Math类的特点

  • 工具类:Math 类是一个工具类,所有方法都是静态的
  • 不可实例化:Math 类的构造方法是私有的,因此不能创建 Math 类的实例
  • 常量:Math 类提供了两个常用的数学常量
    • Math.PI:圆周率 π,约等于 3.141592653589793。
    • Math.E:自然对数的底数 e,约等于 2.718281828459045

Math类常用方法

  • abs():返回绝对值

  • max():返回两个值中的最大值

  • min():返回两个值中的最小值

  • ceil():向上取整

  • floor():向下取整

  • round():四舍五入

  • pow():返回第一个参数的第二个参数次方

    double pow = Math.pow(2, 3); // 8.0 (2^3)
    
  • sqrt():返回平方根

    double sqrt = Math.sqrt(16); // 4.0
    
  • exp():返回自然对数的底数 e 的指定次方

    double exp = Math.exp(1); // 2.718281828459045 (e^1)
    
  • log():返回自然对数(以 e 为底)

    double log = Math.log(Math.E); // 1.0 (ln(e))
    
  • log10():返回以 10 为底的对数

    double log10 = Math.log10(100); // 2.0 (log10(100))
    

Math中的随机数生成

  • Math 类提供了一个简单的随机数生成方法 random(),用于生成 [0.0, 1.0) 范围内的伪随机浮点数。除此之外,Java 还提供了更强大的随机数生成工具类 java.util.Random 和 java.util.concurrent.ThreadLocalRandom

  • Math.random() 方法,返回一个 [0.0, 1.0) 范围内的伪随机浮点数,返回值是一个 double 类型的值,范围包括 0.0,但不包括 1.0

  • 通过 Math.random() 可以生成指定范围的随机数。

    • 生成 [0, 100) 范围内的随机整数

      int randomInt = (int) (Math.random() * 100);
      
    • 生成 [10, 20) 范围内的随机浮点数

      double randomDouble = 10 + Math.random() * 10;
      

Arrays类

Arrays 类位于 java.util 包中,提供数组操作的静态方法

Arrays 类是 Java 中的一个工具类,提供了许多用于操作数组的静态方法。它包含数组的排序、搜索、填充、复制、比较等功能。Arrays 类的方法都是静态的,因此可以直接通过类名调用,无需创建 Arrays 类的实例

Arrays类的特点

  • 工具类:Arrays 类是一个工具类,所有方法都是静态的。

  • 不可实例化:Arrays 类的构造方法是私有的,因此不能创建 Arrays 类的实例。

  • 支持多种数据类型:Arrays 类的方法支持多种数据类型的数组,包括基本类型(如 int[]、double[])和对象类型(如 String[])

Arrays类常用方法

  • sort():对数组进行排序

  • Arrays.sort 方法会对传入的数组进行原地排序,即直接修改原数组的内容

    • 对于基本类型数组,使用 双轴快速排序(Dual-Pivot Quicksort),这是对经典快速排序的优化
    • 对于对象类型数组,使用 归并排序(Merge Sort) 或 TimSort(一种优化的归并排序)
    int[] numbers = {5, 3, 9, 1};
    Arrays.sort(numbers); // numbers = {1, 3, 5, 9}
    
    //部分排序
    int[] numbers = {5, 3, 9, 1, 7};
    Arrays.sort(numbers, 1, 4); // 对索引 1 到 3 的元素排序,numbers = {5, 1, 3, 9, 7}
    
    • sort(Object[] a):对对象数组进行自然排序(要求数组元素实现 Comparable 接口)

    • sort(T[] a, Comparator<? super T> c):使用自定义的比较器对对象数组进行排序

      // 定义一个字符串数组
      String[] names = {"Alice", "Bob", "Charlie", "David", "Eva"};
      
      // 使用 Comparator 定义排序规则:按字符串长度升序排序
      Arrays.sort(names, new Comparator<String>() {
      	@Override
      	public int compare(String s1, String s2) {
      	return s1.length() - s2.length(); // 按长度升序
      	}
      });
      
  • binarySearch():在已排序的数组中使用二分查找算法搜索指定元素

    • 如果找到元素,返回其索引
    • 如果未找到元素,返回一个负值(表示插入点)
    int[] numbers = {1, 3, 5, 9};
    int index = Arrays.binarySearch(numbers, 5); // index = 2
    int index2 = Arrays.binarySearch(numbers, 7); // index2 = -4 (插入点为 3)
    //返回值 = -(插入点索引 + 1)
    
  • fill():将数组的所有元素填充为指定值

    int[] numbers = new int[5];
    Arrays.fill(numbers, 10); // numbers = {10, 10, 10, 10, 10}
    
    //部分填充
    int[] numbers = new int[5];
    Arrays.fill(numbers, 1, 4, 10); // 填充索引 1 到 3 的元素,numbers = {0, 10, 10, 10, 0}
    
  • copyOf():复制数组的指定长度

    int[] numbers = {1, 2, 3, 4, 5};
    int[] copy = Arrays.copyOf(numbers, 3); // copy = {1, 2, 3}
    
    //复制数组的指定范围
    int[] numbers = {1, 2, 3, 4, 5};
    int[] copy = Arrays.copyOfRange(numbers, 1, 4); // copy = {2, 3, 4}
    
  • toString():将数组转换为字符串表示

  • stream():将数组转换为流(Java 8 引入)

asList()方法

  • Arrays.asList():将数组转换为一个固定大小的列表

    • 返回的列表是固定大小的,不能添加或删除元素。

    • 支持修改元素(如 set() 方法)。

  • Arrays.asList 返回的列表是一个 ArrayList,但这个 ArrayList 是 Arrays 类的一个内部类,而不是 java.util.ArrayList。它的底层实现是基于原数组的视图

    • 固定大小。
    • 支持修改元素。
    • 不支持添加或删除元素

System类

System 类是 Java 中的一个核心类,提供了与系统相关的功能和方法。它是一个工具类,所有方法都是静态的,因此可以直接通过类名调用,无需创建 System 类的实例

常用字段

  1. System.in

    • 类型:InputStream

    • 作用:表示标准输入流,通常用于从控制台读取输入

      Scanner scanner = new Scanner(System.in);
      System.out.print("Enter your name: ");
      String name = scanner.nextLine();
      System.out.println("Hello, " + name);
      
  2. System.out

    • 类型:PrintStream

    • 作用:表示标准输出流,通常用于向控制台输出信息

      System.out.println("Hello, World!");
      
  3. System.err

    • 类型:PrintStream

    • 作用:表示标准错误输出流,通常用于输出错误信息

      System.err.println("An error occurred!");
      

常用方法

  1. currentTimeMillis():返回当前时间的毫秒数(从 1970 年 1 月 1 日 00:00:00 UTC 开始)

    long currentTime = System.currentTimeMillis();
    System.out.println("Current Time: " + currentTime);
    
  2. exit(int status):终止当前运行的 Java 虚拟机

    • status:退出状态码。0 表示正常退出,非 0 表示异常退出
    System.exit(0); // 正常退出
    
  3. arraycopy(Object src, int srcPos, Object dest, int destPos, int length):复制数组的一部分到另一个数组

    int[] src = {1, 2, 3, 4, 5};
    int[] dest = new int[5];
    System.arraycopy(src, 0, dest, 0, src.length);
    System.out.println(Arrays.toString(dest)); // 输出: [1, 2, 3, 4, 5]
    

大数类

BigInteger 类

BigInteger 类用于表示任意精度的整数。它可以处理超出 long 类型范围的大整数

特点

  • 任意精度:可以表示任意大小的整数
  • 不可变性:BigInteger 对象是不可变的,所有操作都会返回一个新的 BigInteger 对象
  • 丰富的运算方法:支持加、减、乘、除、取模、幂运算等

创建 BigInteger 对象

  • 通过字符串创建

  • 通过字节数组创建

  • 使用静态方法

    BigInteger bigInt = new BigInteger("123456789012345678901234567890");
    
    byte[] bytes = {0x12, 0x34, 0x56};
    BigInteger bigInt = new BigInteger(bytes);
    
    BigInteger bigInt = BigInteger.valueOf(1234567890L);
    

运算

在对BigInteger进行加减乘除需要使用对应的方法

  • 加法:add(BigInteger val)
  • 减法:subtract(BigInteger val)
  • 乘法:multiply(BigInteger val)
  • 除法:divide(BigInteger val)
  • 取模:mod(BigInteger val)
  • 幂运算:pow(int exponent)
  • 比较:compareTo(BigInteger val)

BigDecimal类

BigDecimal 类用于表示任意精度的浮点数。它可以处理高精度的十进制运算,适用于金融计算等场景

特点

  • 任意精度:可以表示任意大小和精度的浮点数。

  • 不可变性:BigDecimal 对象是不可变的,所有操作都会返回一个新的 BigDecimal 对象。

  • 精确计算:避免了浮点数运算中的精度丢失问题

创建对象

  • 通过字符串创建

    BigDecimal bigDec = new BigDecimal("123.456789012345678901234567890");
    
  • 通过 double 值创建

  • BigDecimal.valueOf(double val) 方法内部通过 Double.toString(val) 将 double 转换为字符串,再基于字符串构造 BigDecimal 对象。这一过程能保留 double 值的完整十进制表示

  • 避免直接使用 double 构造函数导致的精度问题

    BigDecimal bigDec = BigDecimal.valueOf(123.456);//精确的
    
    BigDecimal d = new BigDecimal(0.1);
    System.out.println(d);  // 输出:0.100000000000000005551115123125...
    

常用方法

  • 加法:add(BigDecimal val)

  • 减法:subtract(BigDecimal val)

  • 乘法:multiply(BigDecimal val)

  • 除法:divide(BigDecimal val, int scale, RoundingMode roundingMode)

    BigDecimal quotient = bigDec1.divide(bigDec2, 2, RoundingMode.HALF_UP);
    
    //scale指定计算结果 保留的小数位数
    //roundingMode定义 舍入规则
    
  • 取模:remainder(BigDecimal val)

  • 比较:compareTo(BigDecimal val)

日期类

  • Java 提供了多种日期和时间相关的类,主要包括 java.util.Date、java.util.Calendar、java.text.SimpleDateFormat 以及 Java 8 引入的 java.time 包中的类(如 LocalDate、LocalTime、LocalDateTime 等)

  • java.util.Date 类是第一代日期类,Date 类是 Java 中最早的日期类,用于表示特定的瞬间,精确到毫秒

  • java.util.Calendar 类,Calendar 类是一个抽象类,用于替代 Date 类中的过时方法,提供了对日期和时间的更灵活的操作

  • java.text.SimpleDateFormat 类,SimpleDateFormat 类用于格式化和解析日期和时间

java.time 包(Java 8 引入)

Java 8 引入了新的日期和时间 API,位于 java.time 包中。这些类是不可变的,线程安全,且设计更加合理。

常用类

  • LocalDate:表示日期(年、月、日)。

  • LocalTime:表示时间(时、分、秒、纳秒)。

  • LocalDateTime:表示日期和时间。

常用方法

  • LocalDate.now():获取当前日期

    LocalDate today = LocalDate.now();
    System.out.println("Today: " + today);
    
  • LocalTime.now():获取当前时间

    LocalTime now = LocalTime.now();
    System.out.println("Now: " + now);
    
  • LocalDateTime.now():获取当前日期和时间

    LocalDateTime now = LocalDateTime.now();
    System.out.println("Now: " + now);
    
  • DateTimeFormatter 用于将日期和时间格式化为字符串,或将字符串解析为日期和时间对象

    • ofPattern(String pattern):创建一个自定义格式的 DateTimeFormatter

      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
      
    • format(TemporalAccessor temporal):将日期或时间格式化为字符串。

      String formattedDateTime = formatter.format(now) // 例如: 2023-10-25 14:30:45
      
    • parse(CharSequence text):将字符串解析为日期或时间对象

      LocalDateTime parsedDateTime = LocalDateTime.parse("2023-10-25 14:30:45", formatter);
      
posted @ 2025-03-03 21:55  QAQ001  阅读(11)  评论(0)    收藏  举报