Java-Arrays 工具类的常见方法总结

本文详细介绍了Java中的Arrays类提供的几种重要方法,如将参数转换为List的Arrays.asList(),二分查找的Arrays.binarySearch(),数组复制的Arrays.copyOf()和Arrays.copyOfRange(),数组填充的Arrays.fill(),以及排序的Arrays.sort()。每个方法的参数、返回值和示例代码都被深入解析。
摘要由CSDN通过智能技术生成

 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 ( )方法会将数组转换为逗号分隔的字符串表示形式,并添加起始和结束标识符 "[" 和 "]"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值