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框架初始化解析

    Spring框架初始化解析 Spring框架是由Java编写的一个轻量级的开源框架,主要用于开发企业级应用程序。Spring框架核心是IoC(控制反转)和AOP(面向切面编程)。在使用Spring框架之前,需要先对Spring框架的初始化有一定的认识。 Spring框架初始化步骤 Spring框架的初始化步骤如下: 创建BeanFactory对象 解析Bea…

    Java 2023年5月19日
    00
  • Javaweb mybatis接口开发实现过程详解

    下面是我对 “Javaweb mybatis接口开发实现过程详解” 的完整攻略,以及包含两条示例。 Javaweb mybatis接口开发实现过程详解 mybatis整合步骤 导入mybatis和数据库驱动:在pom.xml中导入功能需要的依赖包,例如: <dependency> <groupId>org.mybatis</gr…

    Java 2023年5月20日
    00
  • 很简单的Java断点续传实现原理

    下面是关于“很简单的Java断点续传实现原理”的完整攻略。 一、什么是Java断点续传? Java断点续传是指,在下载或上传文件时,出现网络中断等问题导致下载或上传任务中断时,可以通过实现“断点续传”功能,让下载或上传任务从中断的地方继续执行,而不是重新开始。 二、Java断点续传的实现原理 Java断点续传的实现原理是,通过HTTP协议中的range请求头…

    Java 2023年5月19日
    00
  • 如何创建一个AJAXControlToolKit的扩展控件

    创建 AJAX Control Toolkit 的扩展控件的过程大致可分为以下几个步骤: 创建一个新的 ASP.NET Web 控件库在 Visual Studio 中创建一个新的 ASP.NET 控件库。这里需要选择“Web 控件库”作为项目类型,并且将项目命名为“AJAXControlToolKit.Extended”。在创建完成后,打开“Assembl…

    Java 2023年6月15日
    00
  • java 线程中start方法与run方法的区别详细介绍

    什么是线程 在 Java 中,我们可以通过 java.lang.Thread 类创建线程。线程是一个可以独立运行的子任务。与程序中的其他子任务不同,线程在操作系统层面上是一种独立的执行单元。在单个应用程序内,多个线程可以同时执行,每个线程都有自己的栈和局部变量,线程之间可以共享堆上的变量。由于线程在同时执行,因此在多线程编程中需要引入线程同步、锁和互斥等概念…

    Java 2023年5月26日
    00
  • nginx lua集成kafka的实现方法

    下面我将为你详细讲解“nginx lua集成kafka的实现方法”的完整攻略。 准备工作 安装Openresty 安装kafka 代码实现 安装kafka-lua kafka-lua具体安装步骤可参考Github官网:kafka-lua。 lua代码基本骨架 local producers = require ("resty.kafka.produ…

    Java 2023年5月20日
    00
  • JSP页面pageEncoding和contentType属性

    JSP(JavaServer Pages)是一种动态Web编程技术,用于在Web服务器中生成动态网页。在JSP中,pageEncoding和contentType都是非常重要的属性。下面我们将逐步介绍这两个属性。 pageEncoding属性 pageEncoding属性用于指定JSP文件的字符编码。在JSP中,如果没有指定编码类型,那么默认编码类型将是IS…

    Java 2023年6月15日
    00
  • 自定义@RequestBody注解如何获取JSON数据

    自定义@RequestBody注解可以方便我们在处理请求数据时进行更细致的控制和处理。其实,要自定义@RequestBody注解获取JSON数据很简单,只需要通过反射机制获取请求体中的数据并进行处理即可。 以下是具体的步骤: 定义自定义注解 定义一个自定义注解并使用@Target(ElementType.PARAMETER)来标识该注解只能用在参数上,例如:…

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