前言:在学习本文之前,应该先学习并清楚了解Java基础部分的数组相关的概念和知识。
若还不具备学习条件,请先前往学习数组部分的基础知识:
《【Java基础教程】(八)面向对象篇 · 第二讲:Java 数组全面解析——动态与静态初始化、二维数组、方法参数传递、排序与转置、对象数组、操作API~》
Java的数组类Arrays
是为了提供一组便捷的操作和处理数组的方法而设计的。它旨在简化开发人员对数组进行操作的复杂性,并提供一些常用的功能。
数组是一种固定长度的数据结构,其中可以存储同一类型的多个元素。数组类Arrays
允许开发人员在Java中声明、创建和操作这些数组。
优点:
提供了丰富的数组操作方法,简化了代码的开发和维护过程;统一了不同类型的数组处理方式,减少了学习和理解的成本。
缺点:
数组类Arrays的功能虽然强大,但并不能完全满足所有数组操作的需求;对于大规模数据的操作,可能存在性能问题。
以下是Java的数组类 Arrays
的全部操作方法API,按功能分类并以表格形式呈现:
方法 | 描述 |
---|---|
List |
返回一个固定长度的List,包含指定数组中的所有元素 |
int binarySearch(Object[] a, Object key) |
在指定数组中使用二分查找算法搜索指定元素的索引 |
int binarySearch(Object[] a, int fromIndex, int toIndex, Object key) |
在指定范围内的数组使用二分查找算法搜索指定元素的索引 |
void sort(Object[] a) |
对指定数组进行排序。方法重载,还支持:字节数组、字符数组、浮点数数组、整型数组 |
int hashCode(Object[] a) |
返回指定数组的哈希码值 |
boolean equals(Object[] a, Object[] a2) |
比较两个数组是否相等 |
String toString(int[] a) |
返回指定整型数组的字符串表示形式。方法重载,还支持:字节数组、字符数组、浮点数数组、布尔数组 |
T[] copyOf(T[] original, int newLength) |
将指定数组的长度调整为指定的新长度,返回一个新数组 |
T[] copyOfRange(T[] original, int from, int to) |
将指定范围内的数组复制到一个新数组中,并返回新数组 |
void fill(int[] a, int val) |
将指定整型数组的所有元素设置为指定值。方法重载,还支持:字节数组、字符数组、浮点数数组、布尔数组 |
boolean deepEquals(Object[] a1, Object[] a2) |
比较两个数组是否深度相等,即逐级比较数组元素 |
T[] toArray(Collection c, Class |
将指定集合转换为具有指定运行时类型的数组 |
这些方法提供了丰富的功能,可以通过调用相应的方法来操作和处理数组。
下面的程序演示了如何使用 Arrays
类的各种方法来操作和处理数组:
import java.util.Arrays;
import java.util.List;
public class ArraysDemo {
public static void main(String[] args) {
// 使用asList方法,将数组转换为List
Integer[] arr = {1, 2, 3, 4, 5};
List<Integer> list = Arrays.asList(arr);
System.out.println("Array as List: " + list);
// 使用binarySearch方法,在数组中查找指定元素的索引
int index = Arrays.binarySearch(arr, 3);
System.out.println("Index of element 3: " + index);
// 使用binarySearch方法,在指定范围内的数组中查找指定元素的索引
int indexInRange = Arrays.binarySearch(arr, 1, 4, 3);
System.out.println("Index of element 3 in range 1-4: " + indexInRange);
// 使用sort方法进行排序
int[] intArray = {8,9,7,6,10};
Arrays.sort(intArray);
System.out.println("Sorted array: " + Arrays.toString(intArray));
// 使用hashCode方法获取数组的哈希码值
int hashCode = Arrays.hashCode(arr);
System.out.println("Hash code of array: " + hashCode);
// 使用equals方法比较两个数组是否相等
Integer[] anotherArr = {1, 2, 3, 4, 5};
boolean isEqual = Arrays.equals(arr, anotherArr);
System.out.println("Arrays are equal: " + isEqual);
// 使用toString方法将整型数组转换为字符串表示形式
String arrString = Arrays.toString(arr);
System.out.println("Array as string: " + arrString);
// 使用copyOf方法将数组长度调整为新长度,并返回新数组
Integer[] resizedArray = Arrays.copyOf(arr, 3);
System.out.println("Resized array: " + Arrays.toString(resizedArray));
// 使用copyOfRange方法复制指定范围内的数组到新数组中
Integer[] copiedArray = Arrays.copyOfRange(arr, 1, 4);
System.out.println("Copied array: " + Arrays.toString(copiedArray));
// 使用fill方法将数组元素设置为指定值
int[] intArr = new int[5];
Arrays.fill(intArr, 7);
System.out.println("Filled array: " + Arrays.toString(intArr));
// 使用deepEquals方法比较两个数组是否深度相等
String[] strArr1 = {"apple", "banana"};
String[] strArr2 = {"apple", "banana"};
boolean isDeepEqual = Arrays.deepEquals(strArr1, strArr2);
System.out.println("Arrays are deeply equal: " + isDeepEqual);
// 使用toArray方法,将集合转换为指定类型的数组
List<String> stringList = Arrays.asList("Hello", "World");
String[] stringArr = stringList.toArray(new String[0]);
System.out.println("Array from collection: " + Arrays.toString(stringArr));
}
}
运行结果如下:
Array as List: [1, 2, 3, 4, 5]
Index of element 3: 2
Index of element 3 in range 1-4: 2
Sorted array: [6, 7, 8, 9, 10]
Hash code of array: 29615266
Arrays are equal: true
Array as string: [1, 2, 3, 4, 5]
Resized array: [1, 2, 3]
Copied array: [2, 3, 4]
Filled array: [7, 7, 7, 7, 7]
Arrays are equal: true
Arrays are deeply equal: true
Array from collection: [Hello, World]
使用Java的数组类Arrays
时,可以考虑以下优化技巧:
数组的索引从0开始,要确保索引值不越界;
不要频繁地进行数组复制操作,以避免性能损失;
在进行大规模数据处理时,可以提前估算存储空间的大小,避免尺寸太大造成的空间浪费,也避免尺寸小造成的数据溢出异常问题;
尽量使用binarySearch()
方法进行查找,而不是遍历整个数组;
对于需要频繁操作的数组,建议使用基本类型(如int
、char
)的数组,而不是对象类型;
注意排序方法的选择,不同的排序算法具有不同的时间复杂度和性能特点。
Java的数组类Arrays
广泛应用于各个领域的开发,常见的应用场景包括:
Java的数组类Arrays提供了丰富的数组操作方法,可用于对数组进行排序、查找、填充等常用操作。它的设计目的是简化数组操作的复杂性,并提供一些常用功能,以提升开发效率和程序性能。使用时需要注意索引越界、性能优化等问题,并根据具体业务场景合理选择适当的方法及技巧。
⏪ 温习回顾上一篇(点击跳转):
《【Java基础教程】(三十七)常用类库篇 · 第七讲:日期时间处理类——三万字全面讲解 LocalDateTime和 DateTimeFormatter,Date、Calendar ~》
⏩ 继续阅读下一篇(点击跳转):
《【Java基础教程】(三十九)常用类库篇 · 第九讲:比较器——Comparable和 Comparator的讲解~》