Arrays工具类的常见方法总结

时间:2024-02-19 08:03:02

一、Arrays.asList( )

1、作用

Arrays.asList( )可以将一个数组以集合的形式传入一个集合对象。通常用来将一组元素全部添加到集合中。

2、参数及返回值

参数:一组动态参数

返回值:List<T>集合

3、应用举例

List<String> boyList=Arrays.asList("陈","杨","张","李");
ArrayList<String> list=new ArrayList<String>();
list.addAll(boyList);
System.out.println(list);

输出结果:[陈, 杨, 张, 李] 

4、源代码解读

        通过上图我们可知, Arrays.asList( )是通过创建一个ArrayList对象,然后将动态参数传入,并返回该集合。

二、Arrays.binarySearch( )

1、作用

Arrays.binarySearch( )方法可以在一个有序数组中,查找到目标元素

2、参数及返回值

参数一:目标数组

参数二:需要查找的元素

返回值:查找到的元素的下标-1

3、应用举例

当目标数组为有序数组时

int[] number= {2,4,5,7,8,9};//有序数组
int target=7;
int index1=Arrays.binarySerach(number,target);
System.out.println(target+"在位置"+index1);

输出结果:7在位置3 

当目标数组为无序数组时

int[] number1= {3,27,9,13,7};//无序数组
int target=7;
//先排序
Arrays.sort(number1);
System.out.println(Arrays.toString(number1));
//再查找
int index2=Arrays.binarySerach(number1,target);
System.out.println(target+"在位置"+index2);

输出结果:

[3, 7, 9, 13, 27]

7在位置1(是经过快速排序后的下标位置) 

4、源代码解读

        binarySearch()方法是调用了 binarySearch0()方法,low为0,high为数组a的长度减一,然后通过计算中间值(mid),再用中间值和目标元素相比较。

        若中间值大于目标值时,说明目标元素可能在目标数组的前半区,则将high赋为mid-1后继续计算中间值,以此循环,直到low<=high时,循环结束。若找到目标元素,则返回其下标,若没找到,则返回一个负数;

        若中间值小于目标值时,说明目标元素可能在目标数组的后半区,则将low赋为mid+1后继续计算中间值,以此循环,直到low<=high时,循环结束。若找到目标元素,则返回其下标,若没找到,则返回一个负数;

三、System.arraycopy( )

1、作用

System.arraycopy( )方法的作用是复制数组

2、参数

参数一:源数组

参数二:从源数组中开始复制的位置

参数三:目标数组

参数四:开始存储的位置

参数五:复制的长度

3、应用举例

int[] number={0,4,64,28,99,12};
int[] target=new int[number.length];
System.out.println("目标数组为:"+Arrays.toString(target));
System.arraycopy(number,0,target,0,number.length);
System.out.println("目标数组为:"+Arrays.toString(target));

输出结果:

目标数组为:[0, 0, 0, 0, 0, 0]
目标数组为:[0, 4, 64, 28, 99, 12] 

三、Arrays.copyOf( )

1、作用

Arrays.copyOf( )方法的作用是复制数组

2、参数及返回值

参数一:源数组

参数二:复制元素的个数

返回值:数组

3、应用举例

int[] number={0,4,64,28,99,12};
System.out.println("原数组为:"+Arrays.toString(number));
System.out.println("原数组地址为:"+number);

//复制前三个元素
//从下标0开始复制三个元素
int[] arr1=Arrays.copyOf(number,3);
System.out.println("前三个元素为:"+Arrays.toString(arr1));
System.out.println("前三个元素地址为:"+arr1);

//复制全部元素
int[] arr2=Arrays.copyOf(number,number.length);
System.out.println("全部元素为:"+Arrays.toString(arr2));
System.out.println("全部元素地址为:"+arr2);

输出结果:

原数组为:[0, 4, 64, 28, 99, 12]
原数组地址为:[I@15db9742
前三个元素为:[0, 4, 64]
前三个元素地址为:[I@6d06d69c
全部元素为:[0, 4, 64, 28, 99, 12]
全部元素地址为:[I@7852e922 

4、源代码解读

         通过上图我们可以知道, Arrays.copyOf( )方法是通过创建一个以传入的参数二为长度的数组,然后通过System.arraycopy( )方法,从源数组下标为0的位置开始复制,复制到新创建的数组中,如果newLength小于源数组长度时,说明源数组的长度足够长,可以满足我们复制newLength个元素的需求;若newLength大于源数组长度时,说明源数组的长度不够,只能将源数组中的元素全部复制到新数组。然后返回新数组。 

四、Arrays.copyOfRange( )

1、作用

Arrays.copyOfRange( )方法可以复制指定区间的元素

2、参数及返回值

参数一:目标数组

参数二:开始复制的位置

参数三:截至位置

3、应用举例

//复制指定区间元素:从下标[2,4)
int[] number={0,4,64,28,99,12};
int[] arr3=Array.copyOfRange(number,2,4);
System.out.println("区间复制元素为:"+Arrays.toString(arr3));//[64, 28]
System.out.println("区间复制元素地址为:"+arr3);
//复制后五个元素
int[] arr4=Arrays.copyOfRange(number,1,number.length);
System.out.println("区间复制元素为:"+Arrays.toString(arr4));
System.out.println("区间复制元素地址为:"+arr4);

 输出结果:

区间复制元素为:[64, 28]
区间复制元素地址为:[I@15db9742
区间复制元素为:[4, 64, 28, 99, 12]
区间复制元素地址为:[I@6d06d69c

4、源代码解读

         通过上图我们可以知道,当开始复制的位置小于截止位置时,即newLength为负数时,抛出参数非法异常当newLength大于零时,通过System.arraycopy( )方法,从源数组下标为0的位置开始复制,复制到新创建的数组中,如果newLength小于源数组长度时,说明源数组的长度足够长,可以满足我们复制newLength个元素的需求;若newLength大于源数组长度时,说明源数组的长度不够,只能将源数组中的元素全部复制到新数组。然后返回新数组。 

五、Arrays.fill( )

1、作用

fill()方法可以将一个数组全部填充为目标值

2、参数及返回值

参数一:目标数组

参数二:填充的数字

返回值:无返回值

3、应用举例

//fill()方法
int[] number1 =new int[5];
System.out.println("填充前:"+Arrays.toString(number1));
Arrays.fill(number,-2);
System.out.println("填充后:"+Arrays.toString(number1));

输出结果:

填充前:[0, 0, 0, 0, 0]
填充后:[-2, -2, -2, -2, -2]

int[] number2={1,2,3,4,5};
System.out.println("填充前:"+Arrays.toString(number2));
Arrays.fill(number2,-2);
System.out.println("填充后:"+Arrays.toString(number2));

 输出结果:

填充前:[1, 2, 3, 4, 5]
填充后:[-2, -2, -2, -2, -2]

4、源代码解读

        通过上图我们可以知道,Arrays.fill()方法是通过for循环来遍历数组(参数1(a)),逐个取出数组中的元素,并将它们赋值为我们需要填充的数字(参数2(val))。

六、Arrays.sort( )

1、作用

Arrays.sort( )可以快速对一个数组进行排序

2、参数及返回值

参数:一个需要排序的数组

返回值:无返回值

3、应用举例

int[] number1= {3,27,9,13,7};//无序数组
Arrays.sort(number1);
System.out.println(Arrays.toString(number1));

输出结果:[3, 7, 9, 13, 27] 

4、源代码解读

 

 

 

七、Arrays.toString( )

1、作用

Arrays.toString( )方法可以将数组以[ num1, num2 , num3, num4]的格式输出

2、参数及返回值

参数:一个需要输出的数组

返回值:字符串

3、应用举例

int[] array={1,2,3,4,5};
System.out.println(array);
System.out.println(Arrays.toString(array));

输出结果:

[I@15db9742
[1, 2, 3, 4, 5] 

4、源代码解读