Arrays工具类的常见方法总结

一、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]
	}

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值