现在的位置: 首页 > 综合 > 正文

【Java】Arrays中之于int数组的方法,Integer数组与int数组

2018年05月06日 ⁄ 综合 ⁄ 共 1931字 ⁄ 字号 评论关闭

在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数组的教学。

抱歉!评论已关闭.