Java 基础–Arrays工具类详解

Java 基础--Arrays工具类详解

简介

Java Arrays 工具类提供了一些用来操作数组的静态方法,这些方法包括如下:

  • 排序和搜索
  • sort()
  • binarySearch()
  • 数组拷贝
  • copyOf()
  • copyOfRange()
  • 数组填充
  • fill()
  • 数组比较
  • equals()
  • 转换为列表
  • asList()

下面将对这些方法进行详细说明。

排序和搜索

sort()

Java Arrays 工具类提供的 sort() 方法用于对指定数组进行排序。默认情况下,该方法按升序排列数组元素。sort() 方法使用的是快速排序(Quicksort)算法实现的。

sort() 方法有两种重载形式。第一种形式是对整个数组进行排序,第二种形式是指定排序范围:

public static void sort(int[] arr) // 对整个 int 数组按升序排序
public static void sort(int[] arr, int fromIndex, int toIndex) // 从 fromIndex 开始到 toIndex-1 ,对 int 数组进行排序

示例代码:

int[] arr = {22, 18, 1, 37, 99};
Arrays.sort(arr); // 对整个数组进行排序
System.out.println(Arrays.toString(arr)); // 输出排序后的数组
// 输出: [1, 18, 22, 37, 99]

binarySearch()

Java Arrays 工具类提供的 binarySearch() 方法用于对已排序的数组执行二分查找(Binary Search)。如果数组未排序,则参数“行为是未定义的”(Undefined)。

binarySearch() 方法有三种重载形式。第一种形式只要求数组和要查找的值,第二种形式还要求起始和结束索引,第三种形式还要求一个比较器。

public static int binarySearch(int[] arr, int key) // 需要查找的元素 key ,在 int 数组 arr 中找到的索引位置
public static int binarySearch(int[] arr, int fromIndex, int toIndex, int key) // 需要查找的元素 key ,在 int 数组 arr 中从索引 fromIndex 开始到索引 toIndex-1 的范围内找到的索引位置
public static int binarySearch(int[] arr, int key, Comparator<int> comparator) // 需要查找的元素 key ,在 int 数组 arr 中找到的索引位置,使用比较器进行比较

示例代码:

int[] arr = {1, 18, 22, 37, 99};
int index = Arrays.binarySearch(arr, 22); // 二分查找 22 在数组中的索引
System.out.println(index); // 输出: 2

数组拷贝

copyOf()

Java Arrays 工具类提供的 copyOf() 方法用于对原始数组进行复制,返回一个新的数组。新数组长度为指定长度,多余的元素由 0 填充。如果源数组长度小于指定的长度,则在新数组的末尾填充 0。

copyOf() 方法有两种重载形式。第一种形式是对整个原始数组进行复制,第二种形式是复制指定范围的原始数组:

public static char[] copyOf(char[] original, int newLength)  // 复制整个 char 数组
public static char[] copyOfRange(char[] original, int from, int to) // 复制 char 数组的一部分

示例代码:

char[] original = {'a', 'b', 'c', 'd', 'e'};
char[] copy = Arrays.copyOf(original, 10); // 复制 char 数组 original,并将其长度增加至 10
System.out.println(Arrays.toString(copy)); // 输出:[a, b, c, d, e, , , , , ]

char[] copy2 = Arrays.copyOfRange(original, 1, 4); // 复制 char 数组 original 的索引 1 到 3 的元素
System.out.println(Arrays.toString(copy2)); // 输出:[b, c, d]

copyOfRange()

copyOfRange() 方法与 copyOf() 方法类似,也是用于对原始数组进行复制,并返回一个新的数组。但 copyOfRange() 方法的作用是复制指定范围内的值。

public static <T> T[] copyOfRange(T[] original, int from, int to, Class<? extends T[]> newType) // 复制一个对象数组的一部分
public static int[] copyOfRange(int[] original, int from, int to)  // 复制 int 数组的一部分

示例代码:

int[] original = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] copy = Arrays.copyOfRange(original, 0, 5); // 复制原始数组的前 5 个元素
System.out.println(Arrays.toString(copy)); // 输出:[1, 2, 3, 4, 5]

数组填充

Java Arrays 工具类提供的 fill() 方法用于将指定值填充到数组中的每个元素上。

fill() 方法有两种重载形式。第一种形式是将整个数组填充为指定值,第二种形式是将指定范围内的数组元素填充指定值:

public static void fill(long[] a, long val) // 将整个 long 数组填充为指定值
public static void fill(int[] a, int fromIndex, int toIndex, int val)  // 将 int 数组的一部分填充为指定值

示例代码:

int[] arr = new int[5];
Arrays.fill(arr, 1); // 将 int 数组每个元素填充为 1
System.out.println(Arrays.toString(arr)); // 输出: [1, 1, 1, 1, 1]

Arrays.fill(arr, 1, 4, 0); // 将 int 数组索引 1 到 3 的元素填充为 0
System.out.println(Arrays.toString(arr)); // 输出: [1, 0, 0, 0, 1]

数组比较

Java Arrays 工具类提供的 equals() 方法用于比较两个数组是否相等。

equals() 方法有两种重载形式。第一种形式直接比较两个相同类型的值数组,第二种形式还可以指定比较范围。

public static boolean equals(int[] a, int[] a2)  // 比较两个 int 数组是否相等
public static boolean equals(Object[] a, Object[] a2) // 比较两个 Object 数组是否相等
public static boolean equals(int[] a, int[] a2, int length); // 比较两个 int 数组从索引 0 开始,到指定长度的元素是否相等

示例代码:

int[] arr1 = {1, 2, 3, 4};
int[] arr2 = {1, 2, 3, 4};
boolean isEqual = Arrays.equals(arr1, arr2); // 判断两个数组是否相等
System.out.println(isEqual); // 输出:true

int[] arr3 = {1, 2, 3, 4, 5};
boolean isEqual2 = Arrays.equals(arr1, arr3, arr1.length); // 判断两个数组从 0 开始,到指定长度是否相等
System.out.println(isEqual2); // 输出:true

转换为列表

Java Arrays 工具类提供的 asList() 方法能够将数组转换为列表。需要注意的是,asList() 方法返回的列表不能修改,否则会抛出异常。

public static <T> List<T> asList(T... a) // 将对象数组转换为定长列表

示例代码:

Integer[] arr = {1, 2, 3, 4, 5};
List<Integer> list = Arrays.asList(arr); // 将 Integer 数组转换为列表
System.out.println(list); // 输出:[1, 2, 3, 4, 5]

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 基础–Arrays工具类详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Spring MVC中@Controller和@RequestMapping注解使用

    在Spring MVC中,@Controller和@RequestMapping是两个重要的注解,它们用于定义控制器和请求映射。本文将详细介绍@Controller和@RequestMapping注解的使用方法,并提供两个示例来说明这些方法的使用。 @Controller注解 @Controller注解用于定义控制器类。在Spring MVC中,控制器类负责…

    Java 2023年5月17日
    00
  • Java的Struts框架报错“ActionForwardNotFoundException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“ActionForwardNotFoundException”错误。这个错误通常由以下原因之一起: 配置错误:如果ActionForward配置不正确可能会出现。在这种情况下,需要检查ActionForward配置以解决此问题。 URL路径问题:如果URL路径不正确,则可能会出现此。在种情况下,需要检查URL路…

    Java 2023年5月5日
    00
  • SpringDataJpa的使用之一对一、一对多、多对多 关系映射问题

    下面是SpringDataJpa关系映射的完整攻略。 一对一 1. 创建实体类 我们在使用SpringDataJpa中的一对一关系映射时,需要创建两个实体类,实体类之间通过@OneToOne建立映射关系。 我们以学生和身份证为例: @Entity public class Student { @Id private Long id; private Stri…

    Java 2023年6月3日
    00
  • Java基础之数组详解

    Java基础之数组详解 什么是数组 数组是一种存储多个相同类型元素的数据类型。在Java中,数组的大小是在创建时确定的,并且在程序运行时不能改变。数组元素可以是任何基本类型、引用类型或其他数组类型。数组是一个对象,因此在Java中,数组变量的值是数组的引用。 创建数组 可以使用new关键字创建一个数组。语法如下: type[] arrayName = new…

    Java 2023年5月26日
    00
  • 一个合格JAVA软件工程师应该具备什么

    作为一个合格的JAVA软件工程师,应该掌握以下技能和知识: 技能 1. JAVA基础 熟练掌握Java语言的基本语法、面向对象思想、异常处理等知识 熟悉常用的设计模式,如单例模式、工厂模式、观察者模式等 熟练使用JVM的各种调优和管理手段,如GC、JMX等 2. 数据库 熟悉关系型数据库和非关系型数据库,如MySQL、Oracle、MongoDB等 能够使用…

    Java 2023年5月19日
    00
  • Mybatis源码解析之事务管理

    Mybatis源码解析之事务管理 什么是事务 事务是指一系列操作,这些操作必须同时成功或者同时失败。比如,银行转账操作就是一个事务,它包括从一个账户扣除金额并把金额加到另一个账户中。这个过程中如果其中一个操作失败,那么这个事务就必须回滚,保证不会出现数据不一致或者数据丢失的情况。 Mybatis中的事务管理 Mybatis提供了基于JDBC的事务管理,其中有…

    Java 2023年5月19日
    00
  • SpringMVC实现文件上传下载的全过程

    OK,SpringMVC实现文件上传下载的全过程可以包含以下几个步骤: 添加MultipartResolver配置 在SpringMVC配置文件中,添加MultipartResolver配置,用于处理文件上传的请求。示例代码如下: <bean id="multipartResolver" class="org.spring…

    Java 2023年6月15日
    00
  • java编写简单的E-mail发送端程序

    下面来详细讲解一下“Java编写简单的E-mail发送端程序”的完整攻略。 1. 准备工作 确保计算机安装了Java开发环境(JDK) 下载JavaMail API包和Java Activation Framework包,并将其添加到项目的classpath中 2. 导入必要的包 使用JavaMail API发送邮件需要导入以下包: import javax…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部