Arrays.asList ( )
作用:将传入的参数转换为一个固定大小的 List。
参数:动态参数 T... a
返回值:list
举例:
import java.util.Arrays;
import java.util.List;
public class aslist {
public static void main(String[] args) {
List<String> list = Arrays.asList("安琪拉","鲁班","百里守约","妲己");
System.out.println(list);
}
}
运行结果:
[安琪拉, 鲁班, 百里守约, 妲己]
源代码解读:
可变参数 a,将参数 a 作为参数传递给 ArrayList 构造函数,并返回一个包装了指定数组的固定大小的列表。使用了泛型 <T> 来表示返回的列表中的元素类型,及传入的参数类型。可传入任意类型的数组。
Arrays.binarySearch ( )
作用:Java 中用于在数组中执行二分查找的方法。在有序数组中查找目标元素。
参数:a (搜索的数组) key (目标的元素)
返回值:如果找到了目标元素,则返回该元素在数组中的下标。否则返回-1。
举例:
import java.util.Arrays;
public class binarySearch {
public static void main(String[] args) {
int[] array = {28,12,89,73,65,18,96,50,8,36};
int target = 36;
Arrays.sort(array);
System.out.println(Arrays.toString(array));
int index = Arrays.binarySearch(array, target);
System.out.println(index);
}
}
运行结果:
[8, 12, 18, 28, 36, 50, 65, 73, 89, 96]
4
源代码解读:
通过传入两个参数调用binarySearch0(int[] a, int fromIndex, int toIndex,int key)方法。
在这里我们可以看到这就是一个二分查找的流程,但是在返回上有不同;当存在元素时,返回下标mid,不存在则返回 -(low+1) 。
Arrays.copyOf ( )
作用:复制数组(原数组和指定新数组的长度)。
参数:original:原始数组,即需要被复制的数组;newLength:新数组的长度。
返回值:复制的新数组。
举例:
import java.util.Arrays;
public class copyOf {
public static void main(String[] args) {
//数组复制
//通过Arrays工具类的copyOf()
int[] numbers = {1,3,5,7,9,11,13,15,17,19};
System.out.println("原数组内容:"+Arrays.toString(numbers));
//复制前三个元素:从下标0开始复制,复制前三个元素
int[] arr1 = Arrays.copyOf(numbers, 3);
System.out.println("前3个元素:"+Arrays.toString(arr1));
//复制所有元素:从下标0开始复制,复制所有元素
int[] arr2 = Arrays.copyOf(numbers, numbers.length);
System.out.println("所有的元素:"+Arrays.toString(arr2));
}
}
运行结果:
原数组内容:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
前3个元素:[1, 3, 5]
所有的元素:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
源代码解读: Arrays.copyOf ( )方法实际上是通过调用底层的System.arraycopy( )方法来完成数组的拷贝。它首先根据新数组的类型和长度创建一个新数组 copy。然后,使用 System.arraycopy( )方法将原始数组original的元素复制到copy数组中。如果新数组的类型为Object[ ],直接创建一个Object[ ]类型的数组。否则,使用Array.newInstance( )方法根据新数组的类型和长度创建一个新的数组。最后,返回新数组copy。
System.arraycopy()
import java.util.Arrays;
public class copyof1 {
public static void main(String[] args) {
//数组复制
//System.arraycopy()效率高
int[] numbers = {1,3,5,7,9,11,13,15,17,19};
int[] target = new int[numbers.length];
/*
* 1.原数组
* 2.开始复制的位置
* 3.目标数组
* 4.开始存储的位置
* 5.复制的长度(复制的元素个数)
*/
System.arraycopy(numbers, 0, target, 0, numbers.length);
//输出数组内容
System.out.println(Arrays.toString(numbers));
System.out.println(Arrays.toString(target));
}
}
运行结果:
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
Arrays.copyOfRange ( )
作用:用于创建一个新的数组,并将原始数组的指定范围内的元素复制到新数组中。
参数:original:原始数组;
from:要复制的原始数组的起始位置(包含);
to指定需要复制的原始数组的结束位置(不包含)。
返回值:一个新的数组,其中包含了原始数组在范围 [from,to)内的元素。
举例:
import java.util.Arrays;
public class copyOfRange {
public static void main(String[] args) {
//数组复制
//通过Arrays工具类的copyOfRange()
int[] numbers = {1,3,5,7,9,11,13,15,17,19};
System.out.println("原数组内容:"+Arrays.toString(numbers));
//复制指定区间元素:从下标1开始复制,复制下标5之前的元素
int[] arr3 = Arrays.copyOfRange(numbers, 1, 5);
System.out.println("指定区间元素:"+Arrays.toString(arr3));
//复制后5个元素:指定下标,复制到数组末尾
int[] arr4 = Arrays.copyOfRange(numbers, numbers.length-5, numbers.length);
System.out.println("后5个元素:"+Arrays.toString(arr4));
}
}
运行结果:
原数组内容:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
指定区间元素:[3, 5, 7, 9]
后5个元素:[11, 13, 15, 17, 19]
源代码解读:
Arrays.copyOfRange首先计算要复制的元素总数newLength=结束位置to-起始位置from。当newLength小于0,即起始位置大于结束位置,那么会抛出一个IllegalArgumentException,表示非法参数异常。然后,根据原始数组original的类型,创建一个新数组copy。如果原始数组的类型为Object[ ],则直接创建一个Object类型的数组。否则,通过Array.newInstance方法创建一个与原始数组类型相同的新数组。最后,使用System.arraycopy()方法将原始数组original中指定范围内的元素复制到新数组copy中。复制从原始数组的起始位置from开始,复制元素的数量为原始数组的长度与起始位置之间的较小值(防止越界)。复制到新数组时,新数组的索引从0开始。最终,返回新数组.
Arrays.fill ( )
作用:将数组的所有元素都设置为指定的值。
参数:array:要填充的数组。
element:指定的元素值。
fromIndex(可无):填充开始的索引(包含)。
toIndex(可无):填充结束的索引(不包含)。
返回值:没有返回值。
举例:
import java.util.Arrays;
public class fill {
public static void main(String[] args) {
int[] array1 = {2,3,4,5,6};
System.out.println("前:"+Arrays.toString(array1));
Arrays.fill(array1, 10);
System.out.println("后:"+Arrays.toString(array1));
Object[] array2 = {2,3,4,5,6};
System.out.println("前:"+Arrays.toString(array2));
Arrays.fill(array2,1,3,"yuan");
System.out.println("后:"+Arrays.toString(array2));
}
}
运行结果:
前:[2, 3, 4, 5, 6]
后:[10, 10, 10, 10, 10]
前:[2, 3, 4, 5, 6]
后:[2, yuan, yuan, 5, 6]
源代码解读:
先调用rangeCheck方法对输入的起始和结束索引进行范围检查,确保它们在有效范围内。然后通过一个简单的 for 循环,遍历起始索引到结束索引之间的元素,将每个元素设置为指定的值val。
Arrays.sort ( )
作用:排序
参数:排序的数组类型
返回值:没有返回值
举例:
import java.util.Arrays;
public class sort {
public static void main(String[] args) {
int[] array1 = {2,3,12,4,44,22,17,5};
System.out.println("前:"+Arrays.toString(array1));
Arrays.sort(array1);
System.out.println("后:"+Arrays.toString(array1));
char[] array2 = {'i','z','h','t','a','o','b','k'};
System.out.println(array2);
Arrays.sort(array2,2,6);
System.out.println(array2);
}
}
运行结果:
前:[2, 3, 12, 4, 44, 22, 17, 5]
后:[2, 3, 4, 5, 12, 17, 22, 44]
izhtaobk
izahotbk
源代码解读:
Arrays.sort ( )全部排序时调用了DualPivotQuicksort.sort( )方法进行排序。该方法实现了快速排序。 Arrays.sort ( )部分排序时先调用rangeCheck方法对输入的起始和结束索引进行范围检查,确保它们在有效范围内;再调用了DualPivotQuicksort.sort( )方法进行排序。
Arrays.toString ( )
作用:将数组转换为字符串表示形式。
参数:即要转换为字符串表示形式的数组。
返回值:字符串。
举例:
import java.util.Arrays;
public class toString1 {
public static void main(String[] args) {
int[] intArray = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
String intArrayString = Arrays.toString(intArray);
System.out.println(intArrayString);
String[] strArray = {"apple", "banana", "pear"};
String strArrayString = Arrays.toString(strArray);
System.out.println(strArrayString);
}
}
运行结果:
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
[apple, banana, pear]
源代码解读:
首先,判断参数是否为null,如果是,则返回字符串 "null"。然后,计算数组的最大索值iMax,如果iMax的值为 -1,表示数组为空,返回空的字符串表示形式。否则,创建StringBuilder对象b,并在末尾添加为数组的起始标识。使用循环遍历数组,将每个元素添加到StringBuilder对象 b
中。如果当前元素是数组的最后一个元素(即i的值等于iMax),则在元素后面添加字符 "]" 并将StringBuilder对象转换为字符串返回。如果当前元素不是数组的最后一个元素,则在元素后面添加两个字符 ", "。Arrays.toString ( )方法会将数组转换为逗号分隔的字符串表示形式,并添加起始和结束标识符 "[" 和 "]"。