在java.util.*中,Arrays似乎很有用的样子,似乎用里面的方法就可以避免使用for循环要自己写对数组的查找、初始化、排序等方法了。
一、先说说Arrays中对整形数组真的有用的方法
1、首先是Arrays.toString()
一般,直接用System.out.println()打印数组,比如这样:
int array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 10 }; System.out.println(array);
出来的结果是一堆乱码:
[Ljava.lang.Integer;@4f19c297
整形数组不像ArrayList<Integer>那样可以直接打印,
但是如果写成这样:
int array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 10 }; System.out.println(Arrays.toString(array));
就真的可以打印成:
[8, 7, 100, 88, 6, 4, 5, 33, 10]
因此,使用Arrays.toString()能够有效地避免写一个for循环
2、Arrays.fill();使得一个值填充一个数组。例如:
int array_init[]=new int[20]; Arrays.fill(array_init, 0); System.out.println(Arrays.toString(array_init));
打印出来则是20个0,也就是此时array_init的值,这个方法在数组初始化的时候略有用,可以避免一个for循环……
3、Arrays.copyOf();则提供了把一个数组的元素复制到另一个数组当中,里面还可以带一些参数,指定复制范围,可以避免使用for循环来完成这个操作,这个没有什么意义,实际操作中很少用。
二、然而Arrays中也对很多整形数组没叼用的方法
1、虽说里面的Arrays.binarySearch();提供了查找功能,但实际上这个方法并不返回当前的你要查找的元素的位置,它是返回你要查找的元素在这个数组升序排列之后的位置,找不到则返回-1,但是不知道为何下面一段程序:
int array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 10 }; System.out.println(Arrays.toString(array)); System.out.println(Arrays.binarySearch(array,7)); Arrays.sort(array); System.out.println(Arrays.toString(array)); System.out.println(Arrays.binarySearch(array,7));
输出一个-8一个3,明明7在排序前排序后都在这个数组里面啊!
2、Arrays.sort();提供了数组升序排序功能
但是没有降序排序功能,有人试图用Arrays.sort(array, Collections.reverseOrder());去解决这个问题,但是这段代码对于int array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 10 };是编译不通过的,对于Integer array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 10 };才OK,比如:
Integer array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 10 }; System.out.println(Arrays.toString(array)); Arrays.sort(array, Collections.reverseOrder()); System.out.println(Arrays.toString(array));
则输出:
[8, 7, 100, 88, 6, 4, 5, 33, 10]
[100, 88, 33, 10, 8, 7, 6, 5, 4]
明显达到我们想要的效果,但是如果把数组从Integer换成int则是不行的,虽然JDK1.5之后什么Integer数组与int数组是系统自动识别的,然后什么方法都没有提供,网上还说这样转换没有实际意义,但是实际上却在这样的语句中编译不通过,对于int的降序排序你还是要老老实实地写for循环,或者用我上次在《【Java】Java中的Collections类——Java中升级版的数据结构》(点击打开链接)
3、至于Arraylist与int数组的互相转换就别想了,还是要老老实实用for循环,只有Integer数组才有特定的方法,Arraylist中的toArray()与Arrays中的asList()根本不知道意义何在?貌似在强推Integer数组取代int数组?毕竟Integer数组中的方法更多。但是教科书上还是一堆int数组的教学。