Arrays
是 Java 标准库中的一个实用工具类,它包含了许多静态方法,用于操作数组。以下是一些 Arrays
工具类中常见方法的总结:
目录
1:Arrays.asList( )
1.1作用
Arrays.asList()
是 Java 中的一个静态方法,用于将一个数组或一组元素转换为一个固定大小的列表。
1.2参数
这个方法接受一个可变参数列表(varargs),这意味着你可以传递任意数量的元素作为参数。这些元素可以是不同类型的,但返回的列表将包含所有传递的元素。
1.3返回值
Arrays.asList()
的返回值是一个收指定数组支持的固定大小的列表。
1.4举例
public class Example {
public static void main(String[] args) {
// 使用基本数据类型数组
int[] intArray = {1, 2, 3, 4, 5};
List<Integer> intList = Arrays.asList(intArray);
System.out.println(intList); // 输出: [1, 2, 3, 4, 5]
// 使用字符串数组
String[] stringArray = {"a", "b", "c"};
List<String> stringList = Arrays.asList(stringArray);
System.out.println(stringList); // 输出: [a, b, c]
1.5源代码解读
Arrays.asList()
的源代码实现实际上非常简单,因为它基于 Java 的泛型机制和一些内部类来实现。下面我将解释其源代码的主要部分,并解释它是如何将数组转换为列表的。
首先,我们需要查看 Arrays
类中的 asList
方法。这个方法有几个重载版本,分别用于处理不同类型的数组。但不论哪种类型,它们的核心实现逻辑是相似的。
以下是 Arrays.asList()
方法的一个泛型版本的简化源代码示例:
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
这个方法的签名表明它接受可变数量的类型为 T
的参数,并返回一个 List<T>
类型的对象。
然而,这个实现并不是直接返回一个 ArrayList
,因为这样会允许对返回的列表进行修改,而 Arrays.asList()
返回的列表应该是不可修改的。因此,实际的实现使用了 Arrays.ArrayList
,这是一个私有的静态内部类,继承自 AbstractList
并重写了 get
、size
和其他一些方法。
2:Arrays.binarySearch( )
2.1作用
Arrays.binarySearch()的方法,进行查找:由于该方法是基于二分查找法实现,数组必须处于有序状态。所以,需要先对数组进行排序,然后再通过Arrays.binarySearch()进行查找。
2.2参数
Object[] a
- 要搜索的已排序数组。Object key
- 要搜索的元素。
2.3返回值
这个方法返回指定元素在数组中的索引,如果数组不包含该元素,则返回负值。
2.4举例
public class Main {
public static void main(String[] args) {
int[] array = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
int target = 36; // 目标元素
// 先排序
Arrays.sort(array);
// 再查找
int index = Arrays.binarySearch(array, target);
System.out.printf("目标值%d在数组中的下标为:%d",target,index);
}
}
3:Arrays.copyOf( )
3.1作用
Arrays.copyOf()的作用是实现数组的复制,返回复制后的数组。
3.2参数
-
original
:这是你想要复制的原始数组。 -
newLength
:这是你想要创建的新数组的长度。
3.3返回值
这个方法返回一个新的数组,它是原始数组的一个副本,并且长度由 newLength
参数指定。如果 newLength
大于原始数组的长度,则新数组中的其余条目将被填充为原始数组相应数据类型的默认值(例如,对于对象数组,这将是 null
;对于 int
数组,这将是 0
)。如果 newLength
小于原始数组的长度,则返回的数组将被截断到指定的长度。
3.4举例
public class CopyOfExample {
public static void main(String[] args) {
// 原始数组
int[] originalArray = {1, 2, 3, 4, 5};
// 创建一个新数组,长度为原始数组长度加1
int[] newArray = Arrays.copyOf(originalArray, originalArray.length + 1);
// 输出新数组
System.out.println(Arrays.toString(newArray));
// 输出:[1, 2, 3, 4, 5, 0]
4:Arrays.copyOfRange( )
4.1作用
Arrays.copyOfRange( )这个方法的作用是从原始数组中复制一个指定范围的子数组,并返回这个新创建的子数组。
4.2参数
-
original
:这是源数组,即你想要从中复制元素的数组。 -
from
:这是子数组的起始索引(包含)。 -
to
:这是子数组的结束索引(不包含)。
4.3返回值
方法返回包含复制元素的新数组。原始数组在调用 copyOfRange()
方法后不会被修改。
4.4举例
public class CopyOfRangeExample {
public static void main(String[] args) {
// 原始数组
int[] originalArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
// 复制从索引 2 到索引 6(不包含)的子数组
int[] subArray = Arrays.copyOfRange(originalArray, 2, 6);
// 输出子数组
System.out.println(Arrays.toString(subArray));
// 输出:[2, 3, 4, 5]
}
}
5:Arrays.fill( )
5.1作用
Arrays.fill()用于快速填充数组,但是只适用于一维数组。
5.2参数
-
第一个参数 (
T[] a
):- 这是一个数组,你想要填充的目标数组。这个数组可以是任何类型(如
int[]
,double[]
,Object[]
等)。
- 这是一个数组,你想要填充的目标数组。这个数组可以是任何类型(如
-
第二个参数 (
int fromIndex
):- 这是你想要开始填充的起始索引(包含)。这个参数是可选的,如果省略,那么填充将从数组的第一个元素开始(索引为 0)。
-
第三个参数 (
int toIndex
):- 这是你想要结束填充的结束索引(不包含)。这个参数也是可选的,如果省略,那么填充将一直进行到数组的最后一个元素。
-
第四个参数 (
T val
):- 这是你想要用来填充数组的值。这个值的类型必须与目标数组的元素类型相匹配。
5.3返回值
Arrays.fill()没有返回值。
5.4举例
public class FillExample {
public static void main(String[] args) {
int[] arr = new int[5];
Arrays.fill(arr, 7);
System.out.println(Arrays.toString(arr)); // 输出:[7, 7, 7, 7, 7]
}
}
6:Arrays.sort( )
6.1作用
Arrays.sort()是Java语言中的数组排序函数,用于对数组进行排序。
6.2参数
这个方法接受一个数组作为参数,并且根据数组的元素类型有不同的重载版本。下面列出了 Arrays.sort()
方法的一些常见参数和用法:
对于原始类型数组:
int[] a
- 对整型数组进行排序。long[] a
- 对长整型数组进行排序。short[] a
- 对短整型数组进行排序。double[] a
- 对双精度浮点数数组进行排序。float[] a
- 对单精度浮点数数组进行排序。char[] a
- 对字符数组进行排序。byte[] a
- 对字节型数组进行排序。
对于对象类型数组:
T[] a
- 对任意类型的对象数组进行排序。在这种情况下,数组的元素必须实现Comparable
接口,这样Arrays.sort()
才能知道如何比较它们。
6.3返回值
Arrays.sort()的返回值为void。
6.4举例
public class ArraysSortExample {
public static void main(String[] args) {
// 整数数组
int[] intArray = {9, 5, 3, 7, 2, 8, 1, 6, 4};
Arrays.sort(intArray);
System.out.println(Arrays.toString(intArray)); // 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
7:Arrays.toString( )
7.1作用
Arrays.toString()用于将数组的内容转换为一个字符串表示形式。
7.2参数
Arrays.toString()
的参数是一个数组,可以是任何类型的数组,包括基本类型数组(如 int[]
, double[]
, char[]
等)和对象类型数组(如 String[]
, 或者自定义对象的数组)。
7.3返回值
Arrays.toString()
方法的返回值是一个字符串,该字符串表示了传入数组的内容。
7.4举例
public class ArraysToStringExample {
public static void main(String[] args) {
// 基本类型数组
int[] intArray = {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(intArray)); // 输出:[1, 2, 3, 4, 5]
// 对象类型数组(例如 String)
String[] stringArray = {"apple", "banana", "cherry"};
System.out.println(Arrays.toString(stringArray)); // 输出:[apple, banana, cherry]