一、Arrays.asList()作用、参数、返回值、举例。(源代码解读)
作用:可以将数组转换为List集合。
注意:
- 该方法适用于引用数据类型的数组(String、Integer...)
- 不支持add()、remove()、clear()等方法。
先看源码:
参数是动态参数,也就是说,该方法可以传入一个动态参数,将其转变为一个ArrayList对象,并且返回一个ArrayList对象。
举例1:
//1.引用数据类型(String)的数组使用Arrays.asList()
String[] string = {"a","b","c"};
List<String> stringList = Arrays.asList(string);
//遍历数组
for(String str:stringList) {
System.out.print(str+" ");
}
输出:a b c
举例2:
//2.引用数据类型(Integer)的数组使用Arrays.asList()
Integer[] integer = {1,2,3};
List<Integer> integerList = Arrays.asList(integer);
//遍历数组
for(int i: integerList) {
System.out.print(i+" ");
}
输出:1 2 3
由此说明:该方法适用于引用数据类型的数组。
举例3:
//3.基本数据类型的数组使用Arrays.asList()
int[] int1 = {1,2,3};
List intList = Arrays.asList(int1);
for(Object o:intList) {
System.out.print(o);
}
输出:[I@3d8c7aca
由此说明:该方法不适用于基本数据类型
二、Arrays.binarySerach()作用、参数、返回值、举例、源代码解读
作用:可以在一个有序的数组中二分查找指定元素的位置。
举例1:当目标元素在数组中出现1次时
int[] arr = {1,2,3,4,5,6,7,8,9};
int index1 = Arrays.binarySearch(arr, 6);
System.out.println(index1);
输出:5
说明目标元素6在数组中的下标位置是5。
举例2:当目标元素在数组中出现多次时
int[] arr = {1,2,3,4,5,6,6,7,8,9};
int index1 = Arrays.binarySearch(arr, 6);
System.out.println(index1);//返回5(第一个6)
int[] arr = {1,1,2,3,4,5,6,7,8,9};
int index1 = Arrays.binarySearch(arr, 1);
System.out.println(index1);//返回1(第二个1)
举例3:当目标元素不在数组中时
int[] arr = {1,2,3,4,5,6,7,8,9};
int index1 = Arrays.binarySearch(arr, 10);
System.out.println(index1);//返回-10
两个参数:
参数1:目标数组。
参数2:目标元素。
四个参数:
参数1:目标数组。
参数2:目标数组的开始位置。
参数3:目标数组的结束位置。
参数4:目标元素。
我们可以看到这两种传参方法中,都有一个binarySearch0(),那就先看一下binarySearch0()的源码:
可以看到,这就是二分查找的实现。当目标元素存在时返回mid,当目标元素不存在时返回-(low+1)。
rangeCheck()方法的源码:
可以看出:这是一个防止越界的实现。主要的代码还是在 binarySearch0()中。
三、Arrays.copyOf()作用、参数、返回值、举例。(源代码解读)
作用:可以复制一个数组。
源码:
参数1:要复制的原数组
参数2:新数组的长度
返回值:返回一个新数组
由源码可以看出:
首先,创建一个新数组,传入参数:数组从0开始复制,复制到新数组从0开始,复制长度为原数组的长度和新长度中较小的一个。
最后,返回新数组。
当新数组的长度小于原数组的长度,便只会复制新数组长度的元素,当新数组的长度大于原数组的长度,超出的元素便会默认为0或null或false。
举例1:当新数组长度大于、等于或小于原数组长度时。
public static void main(String[] args) {
//当新数组长度和原数组长度一样时。
int[] a1 = {1,2,3,4,5};
int[] a2 = Arrays.copyOf(a1, a1.length);
System.out.println(Arrays.toString(a2));//输出:[1,2,3,4,5]
// 当新数组的长度小于原数组的长度时。
int[] a3 = {1,2,3,4,5};
int[] a4 = Arrays.copyOf(a3, 3);
System.out.println(Arrays.toString(a4));//输出:[1,2,3]
}
举例2:当新数组的长度大于原数组的长度时的各种情况。
//当新数组的长度大于原数组的长度时
//情况一:整型数组
int[] a5 = {1,2,3,4,5};
int[] a6 = Arrays.copyOf(a5, 8);
System.out.println(Arrays.toString(a6));//输出:[1, 2, 3, 4, 5, 0, 0, 0]
//情况二:字符串数组
String[] s1 = {"西游记","水浒传","红楼梦","三国演义"};
String[] s2 = Arrays.copyOf(s1, 8);
System.out.println(Arrays.toString(s2));//输出:[西游记, 水浒传, 红楼梦, 三国演义, null, null, null, null]
//情况三:布尔数组
boolean[] b1 = {true,true};
boolean[] b2 = Arrays.copyOf(b1, 6);
System.out.println(Arrays.toString(b2));//输出:[true, true, false, false, false, false]
//情况四:字符数组
char[] c1 = {'1','2','3'};
char[] c2 = Arrays.copyOf(c1, 5);
System.out.println(Arrays.toString(c2));//输出:[1, 2, 3, , ]
四、Arrays.copyOfRange( )作用、参数、返回值、举例、源代码解读
作用:可以指定原数组的开始位置和结束位置从而进行复制。
源码:
参数1:原数组
参数2:要复制原数组的初始位置
参数3:要复制原数组的结束位置
返回值:返回一个新数组
由源代码可以看出:
首先,计算新数组的长度;如果新数组的长度小于0,则抛出IllegalArgumentException 异常;
然后,创建一个和原数组类型相同的新数组,使用Arrays.copy()方法将原数组中指定范围的元素复制到新数组中。
最后返回新数组。
举例:
public static void main(String[] args) {
// 复制原数组的指定位置的元素
int[] a1 = { 1, 2, 3, 4, 5 };
int[] a2 = Arrays.copyOfRange(a1, 1, 4);
System.out.println(Arrays.toString(a2)); // 输出:[2, 3, 4]
// //当复制原数组的指定位置的元素个数小于0时
// int[] a3 = {1,2,3};
// int[] a4 = Arrays.copyOfRange(a3, 1, 0);
//
// System.out.println(Arrays.toString(a4));//会抛异常
// 当复制原数组的指定位置的元素个数大于原数组的长度时
//超出的元素会默认为0,null,false...
int[] a5 = { 1, 2, 3 };
int[] a6 = Arrays.copyOfRange(a5, 1, 5);
System.out.println(Arrays.toString(a6));//输出:[2, 3, 0, 0]
}
五、Arrays.fill( )作用、参数、返回值、举例、源代码解读
作用:可以将数组中的所有元素替换成指定的值。
源码:
参数1:要进行替换的数组
参数2:要替换所有元素的值
返回值:无返回值
由源码可以看出:是将原数组进行遍历,将指定值赋给原数组的每一个元素,就可以实现替换原数组中所有元素。
举例:
public static void main(String[] args) {
int[] a1 = {1,2,3,4};
Arrays.fill(a1, 5);
System.out.println(Arrays.toString(a1));//输出:[5, 5, 5, 5]
}
六、Arrays.sort( )作用、参数、返回值、举例、源代码解读
作用:可以对数组进行排序。
源码:
里面DualPivotQuicksort类又调用了sort()方法,这个方法具体进行排序。
参数:要排序的数组
返回值:无返回值
举例:
public static void main(String[] args) {
int[] a1 = {5,2,3,6,4,1};
Arrays.sort(a1);
System.out.println(Arrays.toString(a1));//[1, 2, 3, 4, 5, 6]
}
七、Arrays.toString( )作用、参数、返回值、举例、源代码解读
作用:可以将数组转换成字符串形式。
源码:
参数:要进行打印的数组。
返回值:字符串
由源码可以看出:
首先,判断数组的数组是否为空,如果为空,则返回字符串"null";
然后,获取数组的长度,如果数组的长度为0,则返回字符串"[]";
然后,使用StringBuilder来创建一个字符串,对数组进行遍历,依次将元素拼接到StringBuilder中;
再开始遍历之前,拼接“[”,在遍历时,每遍历拼接一个元素,就在后面拼接“,”;
然后,遍历到最后一个元素时,在最后添加“]”;
最后,将StringBuilder转换成字符串返回。
举例:
public static void main(String[] args) {
int[] a1 = {1,2,3};
System.out.println(Arrays.toString(a1));//输出:[1, 2, 3]
}