在Java中,提供了一个专门用于操作数组的工具类,即Arrays类,该类提供了一些方法对数组进行排序,打印,复制等操作。下面是一些该工具类方法总结。
1.Arrays.aslist()
作用:当我们想直接将数组中的全部内容(或一组相同类型的参数)以List(集合)类型返回时,就可以用到Arrays的aslist()方法,例
public static void main(String[] args) {
int[] arr= {0,1,2,3,4,5};
//传入数组
List<int[]> List=Arrays.asList(arr);
//传入一组动态参数
List<Integer> List1=Arrays.asList(0,1,2,3,4,5);
System.out.println(List1);
}
该方法解析:先看一段源码
显然,源代码中Arrays.aslist的参数是一组动态参数,所以可以传入数组或一组内容(必须为引用类型),传入的参数返回为List<T>集合,即可实现将数组或一组数据转化为List(集合)。
2.Arrays.binarySearch()
通过上面可以看出该方法在Arrays类中大量重载,即可以传入不同类型(类型不同,数量不同,顺序不同)的参数,根据传入参数的不同,使用的场景不同。
参数:(数组名称,目标元素)
返回值:返回int类型数据,即目标元素在数组中的下标
方法的主要作用:在数组中查找目标元素,例:
int[] arr= {0,1,2,3,4,5};
int index=Arrays.binarySearch(arr,4);
System.out.println(index);
观察其源码, 其内部返回了一个binarySearch0方法,该方法被私有化,传入参数(数组,数组起始下标,数组结束下标,目标元素),方法体为一段二分查找的典型代码,在二分查找找到目标元素后返回int类型,即目标元素下标。二分查找必须是有序数组,所以该方法传入的数组也必须为有序数组。
3. Arrays.copyOf()
可以看出该方法内部也是发生了大量重载,即可以传入不同类型(类型不同,数量不同,顺序不同)的参数,根据传入参数的不同,使用的场景不同。
参数:(数组名称,复制数组长度)
例:
int[] arr= {0,1,2,3,4,5};
int[] arrnew=Arrays.copyOf(arr, 3);
//打印复制的新数组内容
System.out.println(Arrays.toString(arrnew));//运行结果[0, 1, 2]
该方法作用:将传入的数组从首元素开始复制,复制的个数为传入的数组长度(即传入的第二个参数),返回一个复制过的新的数组
观察源码,可以看出该方法例提供了一个新的数组,通过System的arraycopy方法将原数组中元素按照传入下标复制到新的数组,返回该数组
4.Arrays.copyOfRange()
可以看出该方法内部也是发生了大量重载,即可以传入不同类型(类型不同,数量不同,顺序不同)的参数,根据传入参数的不同,使用的场景不同。
参数:(数组名称,开始复制下标,结束复制下标)
先看实例:
int[] arr= {0,1,2,3,4,5};
int[] arrnew=Arrays.copyOfRange(arr,1,3);
//打印复制的新数组内容
System.out.println(Arrays.toString(arrnew));//运行结果[ 1, 2]
方法作用:将传入的数组从传入的参数开始复制下标位置(包含该位置元素)开始复制,复制到结束复制下标位置(不包含该位置元素),返回一个复制的新数组
观察其源码:可以看出该方法中先判断了新的数组长度如果<0,则抛出异常,若>0,则定义一个新的数组, 再通过System的arraycopy方法将原数组中元素按照传入下标复制到新的数组,返回该数组
5.Arrays.fill()
可以看出该方法内部也是发生了大量重载,即可以传入不同类型(类型不同,数量不同,顺序不同)的参数,根据传入参数的不同,使用的场景不同。
参数:(数组名称,要填充的内容)
实例:
int[] arr= {0,1,2,3,4,5};
Arrays.fill(arr, 1);
//打印填充后的新数组内容
System.out.println(Arrays.toString(arr));//运行结果[1, 1, 1, 1, 1, 1]
该方法作用:用传入的参数填充数组
观察源码:可知传入参数后,利用for循环遍历将原数组中所有元素替换为新的元素
区间填充: 参数(数组名称,填充的初始下标,填充的结束下标,要填充的内容)
通过源码可知,该方法通过传入的两个下标为起始位置和结束位置进行填充
例:
int[] arr= {0,1,2,3,4,5};
Arrays.fill(arr, 1, 3, 1);
//打印填充后的新数组内容
System.out.println(Arrays.toString(arr));//运行结果[0, 1, 1, 3, 4, 5]
6.Arrays.sort()
参数:(数组名称)
该方法也是重载的方法,方法作用:对数组从小到大进行排序
int[] arr= {0,1,2,3,4,5};
Arrays.sort(arr);
//排序后的新数组内容
System.out.println(Arrays.toString(arr));//运行结果[0, 1, 2, 3, 4, 5]
观察其源码:可以看出其内部返回了DualPivotQuicksort类的sort方法,而这个方法中实现了快速排序算法(暂时不展现该排序算法的完整代码),返回排序后的新的数组
因为sort是继承自最终父类Object类中的方法,所以自定义引用类型数组需重写sort方法。
7.Arrays.toString()
方法作用:打印数组中所以元素
参数:(数组名称)
观察源码,可有看出该方法先检查了该数组是否为空,若为空,返回null,不为空检查数组长度,若数组长度-1结果为-1,则说明该数组是空数组,返回"[]",都不满足,创建一个StringBuilder对象,首尾分为添加"[","]",中间添加所以数组元素,返回对象b