今天,让我们了解一下Arrays工具类的常见方法的作用、参数、返回值、实例以及源代码解读吧!
一、Arrays.asList()
1.作用:返回由指定数组支持的固定大小的列表
2.参数:动态参数 asList(T… a)
3.返回值:一个列表
4.实例:
List<String> list = Arrays.asList("Hello","World");
System.out.println(list);//[Hello, World]
5.源代码解析:
调用Arrays工具类的asList()方法;传入一个动态数组,返回一个列表
二、Arrays.binarySearch()
1.作用:使用二分查找法快速查找指定的值(前提是数组必须是有序的,支持lambda表达式,泛型)
2.参数:binarySearch(Object[] a [int fromIndex, int toIndex], Object key)
- 参数1:要查找的数组
- 参数2:开始结束位置(可无)
- 参数3:需要查找的元素值
3.返回值:有则返回对应下标,无则返回负值
4.实例:
//找到元素3所在位置
int[] array = {1,3,5,7,9,4,6,2};
Arrays.sort(array);//必须先排序
System.out.println(Arrays.toString(array));//[1, 2, 3, 4, 5, 6, 7, 9]
int index = Arrays.binarySearch(array, 3);
System.out.println(index);//2
5.源代码解析:
调用Arrays工具类的binarySearch()方法;传入参数,利用二分查找找指定元素,找到则返回下标,找不到则返回负数
三、Arrays.copyOf()
1.作用:复制填充数组(只可以指定原数组以及新数组的复制长度)
2.参数:copyOf(T[] original, int newLength)
- 参数1:被复制数组
- 参数2:新数组的长度
3.返回值: 复制后的新数组
4.实例:
int[] array = {1, 2, 3, 4, 5, 6, 7, 9};
System.out.println("原数组"+Arrays.toString(array));//[1, 2, 3, 4, 5, 6, 7, 9]
int[] array1 = Arrays.copyOf(array, 5);//复制长度为5,第二个参数为新数组的长度
int[] array2 = Arrays.copyOf(array, 15);//新数组长度为15,原数组复制完后,其余补为默认值
System.out.println("复制长度为5的新数组"+Arrays.toString(array1));//[1, 2, 3, 4, 5]
System.out.println("复制长度为15的新数组"+Arrays.toString(array2));//[1, 2, 3, 4, 5, 6, 7, 9, 0, 0, 0, 0, 0, 0, 0]
5.源代码解析:
调用Arrays工具类的copyOf()方法;传入参数,根据原数组和复制后数组的长度,返回复制完后的数组,原数组复制完,其余长度位置补默认值。
四、Arrays.copyOfRange()
1.作用:复制填充数组( Arrays.copyOf() 基础上可以指定新数组从什么位置开始和结束复制)
2.参数:copyOfRange(int[] original, int from, int to)
- 参数1:被复制数组
- 参数2:被复制数组的开始位置
- 参数3:被复制数组的结束位置
3.返回值:复制后的新数组
4.实例:
int[] array = {1, 2, 3, 4, 5, 6, 7, 9};
System.out.println("原数组"+Arrays.toString(array));//[1, 2, 3, 4, 5, 6, 7, 9]
int[] array4 = Arrays.copyOfRange(array, 3, 5);//[4, 5]
int[] array5 = Arrays.copyOfRange(array, 3, 15);//[4, 5, 6, 7, 9, 0, 0, 0, 0, 0, 0, 0]
System.out.println("复制3-5位的新数组"+Arrays.toString(array4));
System.out.println("复制3-15位的新数组"+Arrays.toString(array5));
5.源代码解析:
调用Arrays工具类的copyOfRange()方法;传入参数,判断新数组的长度是否为正数(结束位置-开始位置);为正则按照指定区域进行复制,否则抛异常。
五、Arrays.fill()
1.作用:将指定元素填充给数组某元素
2.参数:fill(int[] a, [int fromIndex, int toIndex] int val)
- 参数1:已有原数组
- 参数2:开始结束位置(可无)
- 参数3:指定的元素
3.返回值:无
4.实例:
String[] a = {"a", "b", "c", "d", "e", "f"};
System.out.println(Arrays.toString(a)); //[a, b, c, d, e, f]
Arrays.fill(a, "java");
System.out.println(Arrays.toString(a)); //[java, java, java, java, java, java]
String[] b = {"a", "b", "c", "d", "e", "f"};
System.out.println(Arrays.toString(b)); //[a, b, c, d, e, f]
Arrays.fill(b, 2, 5, "java");
System.out.println(Arrays.toString(b)); //[a, b, java, java, java, f]
5.源代码解析:
调用Arrays工具类的fill()方法;传入参数后,只要结束位置大于开始位置,就可以将指定元素覆盖原数组中指定位置。
六、Arrays.sort()
1.作用:给数组排序(默认升序,支持lambda,泛型)
2.参数:sort(Object[] a[, int fromIndex, int toIndex])
- 参数1:需要排序的数组
- 参数2:开始排序结束排序位置
3.返回值:无
4.实例:
int[] array = {1, 2, 3, 4, 5, 6, 7, 9};
System.out.println("原数组"+Arrays.toString(array));//[1, 2, 3, 4, 5, 6, 7, 9]
int[] array6 = {1,3,5,7,9,4,6,2};
System.out.println(Arrays.toString(array6));//[1,3,5,7,9,4,6,2]
Arrays.sort(array);//默认全排
//Arrays.sort(array6,2,8);//只排指定区域
System.out.println("全部排序后数组"+Arrays.toString(array6));//[1, 3, 2, 4, 5, 6, 7, 9]
//System.out.println("只排2-8区域后数组"+Arrays.toString(array6));//[1, 3, 5, 7, 9, 4, 6,2]
5.源代码解析:
调用Arrays工具类的sort()方法;传入参数后,(1)若是全排,传入一个需要排序的数组,方法中调用了DualPivotQuicksort类的sort()方法。(2)若要给指定区域进行排序,就要调用rangeCheck()方法。
七、Arrays.toString()
1.作用:将数组转换为字符串
2.参数:待转化数组 toString(Object[] a)
3.返回值:转化后的字符串
4.实例:
String[] s = {"a", "b", "c", "d", "e", "f"};
System.out.println(Arrays.toString(s)); //[a, b, c, d, e, f]
5.源代码解析:
调用Arrays工具类的sort()方法;传入参数后, 判断传入的数组a是null,则返回字符串"null"。计算数组中最后一个元素的下标,并将其存储在变量iMax中。判断iMax等于-1,则返回字符串"[ ]"。否则,创建一个可变字符串StringBuilder对象保存b。在StringBuilder对象b追加左方括号[,表示数组的开始。for循环遍历数组,判断当前索引i是否等于最后一个元素的索引iMax。若是,则向StringBuilder对象b追加右方括号],并将StringBuilder转换为字符串返回。如果当前元素不是最后一个元素,则在追加当前元素后,还向StringBuilder对象b追加逗号和空格。