Arrays类与Array类探究

这里所说的Arrays类是util包中的java.util.Arrays,Array是反射包中的java.lang.reflect.Array。

首先介绍Arrays类的常用的静态方法:

1.排序方法:一系列重载的Arrays.sort(),参数是一个数组对象,可以是7种基本数据类型的数组,也可以是Object类型的数组。:

示例:

public static void main(String[] args) {
	int[] a = new int[] { 5, 6, 2, 1, 3, 8 };
	Arrays.sort(a);
	for (Object i : a) {
		System.out.print(i + " ");
	}
}
2.二分查找方法:一系列重载的Arrays.binarySearch(),第一个参数是数组对象,第二个参数是要查找的值,有的重载可能不止有两个参数:

注意,此方法当且仅当在调用sort()方法后调用,返回值才有意义:

public static void main(String[] args) {
	int[] a = new int[] { 5, 6, 2, 1, 2, 8 };
	Arrays.sort(a);
	System.out.println();
	int index = Arrays.binarySearch(a, 5);
	System.out.println(index);//打印出3
}
一开始数组是[5,6,2,1,2,8],在sort之后,数组变成了[1,2,2,5,6,8],用二分查找得到元素5的索引是3。

3.判断两个数组是否相同,也就是说判断两个数组的元素是否完全对应相同:Arrays.equals(),参数是两个数组对象,可以是null

public static void main(String[] args) {
	int[] a = new int[] { 5, 6, 2, 1, 2, 8 };
	int[] b = new int[] { 6, 5, 6, 2, 1, 9 };
	boolean same = equals(a, b);
	System.out.println(same);
}
以上两个数组对象,因为第一个索引对应的值就不相同,所以返回是false。

4.把一个数组所有的元素都变成同一个值,一系列重载的Arrays.fill(),第一个参数是数组对象,第二个参数是数组各元素要变成的值:

public static void main(String[] args) {
	int[] a = new int[] { 2, 5, 8 };
	Arrays.fill(a, 3);
	for (int i : a) {
		System.out.print(i + " ");
	}
}
fill()方法的内部实现其实就是按索引遍历数组,赋值。fill()方法执行过后,数组的的元素就都变成了指定的值,长度还是原来的长度。

5.复制一个数组,返回值是一个数组:Arrays.copyOf(),Arrays.copyOfRange():

copyOf()第一个参数是数组对象,第二个参数是要返回的数组的长度,从原数组的索引0处开始复制,如果要返回的数组的长度大于原来数组的长度,则多出来的是用默认值0补上的;

copyOfRange()第一个参数是参数对象,第二、第三个参数分别是开始索引及结束索引,这里索引的要求条件比较复杂,用的时候需要看下方法的源码。

public static void main(String[] args) {
	int[] a = new int[] { 2, 8, 5, 6 };
	int[] b = Arrays.copyOf(a, 6);
	int[] c = Arrays.copyOfRange(a, 1, 6);
	for (int i : a) {
		System.out.print(i + " ");
	}//打印结果是2 8 5 6<strong></strong>
	System.out.println();
	for (int i : b) {
		System.out.print(i + " ");
	}//打印结果是2 8 5 6 0 0
	System.out.println();
	for (int i : c) {
		System.out.print(i + " ");
	}//打印结果是8 5 6 0 0
}

6.名字看起来很好,但是其实没什么卵用的一个方法,Arrays.asList(),参数是1个或者n个数组对象:

返回值是一个List对象,但是千万要注意,这个List对象的元素是原来的数组对象,而不是数组对象的元素,遍历的话得到的是数组对象,要想得到数组的元素,还得更深层的遍历,好鸡肋的方法:

public static void main(String[] args) {
	int[] a = new int[] { 2, 8, 5, 6 };
	int[] b = new int[] { 1, 3, 5 };
	List<int[]> list = Arrays.asList(a, b);
	System.out.println(list.size());//打印出2
	if (!CollectionUtils.isEmpty(list)) {
		for (int i = 0; i < list.size(); i++) {
			int[] c = list.get(i);
			if (c.length > 0) {
				for (int j = 0; j < c.length; j++) {
					System.out.print(c[j] + " ");
				}
			}
		}
	}//打印结果是2 8 5 6 1 3 5
 }
7.用于数组简单打印的方法,Arrays.toString(),参数是一个数组对象,返回值是一个以左中括号开始、以右中括号结束的字符串。因为直接打印数组对象的话,会打印出我们看不懂的东西,所以如果只是想看看数组的元素是什么的话,就可以用这个方法,把数组转换成一个字符串,可以很轻松的看到数组的各个元素值:

public static void main(String[] args) {
	int[] a = new int[] { 2, 8, 5, 6 };
	String aStr = Arrays.toString(a);
	System.out.println(aStr);//打印出[2,8,5,6]
}

接下来再介绍Array类的一些常用的静态方法:Array是动态生成和访问数组的工具类

1.生成数组对象的方法:Array.newInstance(),传两个参数,第一个参数是数组元素类型对应的Class对象,第二个元素是数组的长度:

public static void main(String[] args) {
	int[] a = (int[]) Array.newInstance(int.class, 3);
	Arrays.fill(a, 5);
	System.out.println(Arrays.toString(a));
}
上面第一行代码创建了一个长度为3的int型数组,第二行代码把数组元素全部变成5,第三行代码简单打印此数组。

2.获得数组长度的方法:Array.getLength(),参数是一个数组对象。其实这个方法有点累赘了,获取数组长度直接用数组.length就好了:

public static void main(String[] args) {
	int[] a = (int[]) Array.newInstance(int.class, 3);
	System.out.println(Array.getLength(a));//打印出3
}
3.获取某个数组的某个索引的值:Array.get(),Array.getXXX(),传两个参数,第一个参数是数组对象,第二个参数是索引值,效果等同于数组对象[i],所以基本不用这个方法

public static void main(String[] args) {
	int[] a = (int[]) Array.newInstance(int.class, 3);
	for (int i = 0; i < a.length; i++) {
		a[i] = 2 * i + 1;
	}
	Object b = Array.get(a, 1);
	System.out.println(b);
	int c = Array.getInt(a, 2);
	System.out.println(c);
}
Array.get()返回值类型是Object,所以说如果传入的数组是别的接口返回的,自己不太清楚数组元素的类型时(极少数的情况),就可以用这个方法。Array.getInt()返回值则是int型。

4.设置某个数组的某个索引处的值:Array.set(),Array.setXXX(),传三个参数,第一个参数是一个数组对象,第二个参数是索引值,第三个参数是要设置成的值,效果等同于数组对象[i]=value,所以也基本不用这个方法:

public static void main(String[] args) {
	int[] a = (int[]) Array.newInstance(int.class, 3);
	a[0] = 6;
	Array.set(a, 1, 8);
	Array.setInt(a, 2, 10);
	System.out.println(Arrays.toString(a));
}
综上,Array类最重要的方法就是newInstance(),用于动态产生一个数组。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值