java-Arrays

Java中的`Arrays` API

1. 简介

`java.util.Arrays`是Java标准库中的一个类,包含了一组用于操作数组的静态方法。它提供了排序、搜索、比较、填充、复制等一系列方便的方法,使得对数组的处理变得更加简单和高效。`Arrays`类主要用于处理一维和多维数组,可以对原生类型数组和对象数组进行操作。

2. 常用方法

2.1 `sort` 方法

`sort` 方法用于对数组进行排序。`Arrays` 类提供了多种 `sort` 方法,可以对不同类型的数组(如 `int\[\]`、`double\[\]`、`Object\[\]` 等)进行排序。`sort` 方法使用了双轴快速排序(Dual-Pivot Quicksort)算法,它在大多数情况下表现优异。

```java

import java.util.Arrays;

public class SortExample {

public static void main(String\[\] args) {

int\[\] intArray = {5, 3, 8, 1, 2};

Arrays.sort(intArray);

System.out.println("Sorted int array: " + Arrays.toString(intArray));

String\[\] strArray = {"apple", "orange", "banana", "pear"};

Arrays.sort(strArray);

System.out.println("Sorted string array: " + Arrays.toString(strArray));

}

}

```

2.2 `binarySearch` 方法

`binarySearch` 方法用于在有序数组中进行二分查找。它可以在数组中快速找到目标元素的位置。该方法适用于原生类型数组和对象数组。

```java

import java.util.Arrays;

public class BinarySearchExample {

public static void main(String\[\] args) {

int\[\] intArray = {1, 2, 3, 5, 8};

int index = Arrays.binarySearch(intArray, 5);

System.out.println("Index of 5: " + index);

String\[\] strArray = {"apple", "banana", "orange", "pear"};

index = Arrays.binarySearch(strArray, "orange");

System.out.println("Index of orange: " + index);

}

}

```

2.3 `copyOf` 和 `copyOfRange` 方法

`copyOf` 方法用于将数组复制到一个新的数组中,可以指定新数组的长度。如果新数组的长度大于原数组,则多余的部分会用默认值填充。`copyOfRange` 方法用于复制数组的指定范围。

```java

import java.util.Arrays;

public class CopyExample {

public static void main(String\[\] args) {

int\[\] originalArray = {1, 2, 3, 4, 5};

int\[\] copiedArray = Arrays.copyOf(originalArray, 7);

System.out.println("Copied array: " + Arrays.toString(copiedArray));

int\[\] rangeCopiedArray = Arrays.copyOfRange(originalArray, 1, 4);

System.out.println("Range copied array: " + Arrays.toString(rangeCopiedArray));

}

}

```

2.4 `equals` 方法

`equals` 方法用于比较两个数组是否相等。它可以用于比较原生类型数组和对象数组。对于对象数组,`equals` 方法会使用每个元素的 `equals` 方法进行比较。

```java

import java.util.Arrays;

public class EqualsExample {

public static void main(String\[\] args) {

int\[\] array1 = {1, 2, 3};

int\[\] array2 = {1, 2, 3};

int\[\] array3 = {4, 5, 6};

System.out.println("array1 equals array2: " + Arrays.equals(array1, array2));

System.out.println("array1 equals array3: " + Arrays.equals(array1, array3));

String\[\] strArray1 = {"apple", "orange"};

String\[\] strArray2 = {"apple", "orange"};

System.out.println("strArray1 equals strArray2: " + Arrays.equals(strArray1, strArray2));

}

}

```

2.5 `fill` 方法

`fill` 方法用于将数组的所有元素或指定范围内的元素填充为指定的值。该方法适用于原生类型数组和对象数组。

```java

import java.util.Arrays;

public class FillExample {

public static void main(String\[\] args) {

int\[\] intArray = new int5;

Arrays.fill(intArray, 7);

System.out.println("Filled int array: " + Arrays.toString(intArray));

int\[\] rangeArray = new int5;

Arrays.fill(rangeArray, 1, 3, 9);

System.out.println("Range filled array: " + Arrays.toString(rangeArray));

}

}

```

2.6 `hashCode` 方法

`hashCode` 方法用于计算数组的哈希码。该方法适用于原生类型数组和对象数组。对于对象数组,`hashCode` 方法会使用每个元素的 `hashCode` 方法进行计算。

```java

import java.util.Arrays;

public class HashCodeExample {

public static void main(String\[\] args) {

int\[\] intArray = {1, 2, 3};

System.out.println("Hash code of int array: " + Arrays.hashCode(intArray));

String\[\] strArray = {"apple", "orange"};

System.out.println("Hash code of string array: " + Arrays.hashCode(strArray));

}

}

```

2.7 `deepEquals` 方法

`deepEquals` 方法用于深度比较两个数组是否相等。该方法适用于嵌套数组(如二维数组)。

```java

import java.util.Arrays;

public class DeepEqualsExample {

public static void main(String\[\] args) {

int\[\]\[\] array1 = {{1, 2, 3}, {4, 5, 6}};

int\[\]\[\] array2 = {{1, 2, 3}, {4, 5, 6}};

int\[\]\[\] array3 = {{7, 8, 9}, {10, 11, 12}};

System.out.println("array1 deepEquals array2: " + Arrays.deepEquals(array1, array2));

System.out.println("array1 deepEquals array3: " + Arrays.deepEquals(array1, array3));

}

}

```

2.8 `deepHashCode` 方法

`deepHashCode` 方法用于计算嵌套数组的哈希码。与 `hashCode` 方法不同,它会递归计算每个元素的哈希码。

```java

import java.util.Arrays;

public class DeepHashCodeExample {

public static void main(String\[\] args) {

int\[\]\[\] array = {{1, 2, 3}, {4, 5, 6}};

System.out.println("Deep hash code of array: " + Arrays.deepHashCode(array));

}

}

```

2.9 `toString` 和 `deepToString` 方法

`toString` 方法用于将数组转换为字符串表示。对于嵌套数组,使用 `deepToString` 方法进行深度转换。

```java

import java.util.Arrays;

public class ToStringExample {

public static void main(String\[\] args) {

int\[\] intArray = {1, 2, 3};

System.out.println("intArray toString: " + Arrays.toString(intArray));

int\[\]\[\] nestedArray = {{1, 2, 3}, {4, 5, 6}};

System.out.println("nestedArray deepToString: " + Arrays.deepToString(nestedArray));

}

}

```

2.10 `asList` 方法

`asList` 方法用于将数组转换为 `List`,方便进行集合操作。

```java

import java.util.Arrays;

import java.util.List;

public class AsListExample {

public static void main(String\[\] args) {

String\[\] strArray = {"apple", "orange", "banana"};

List<String> list = Arrays.asList(strArray);

System.out.println("List: " + list);

// 修改数组会影响List

strArray0 = "pear";

System.out.println("Modified List: " + list);

}

}

相关推荐
To_OC1 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
Scott9999HH1 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔1 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
2401_841495642 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
码智社2 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海2 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖3 小时前
JDK 26 新特性详解
java·开发语言
马优晨4 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区5 小时前
怎么把C语言学到精通?
c语言·开发语言