Arrays是针对数组的工具类,可以进行 排序,查找,复制填充等功能。
与使用System.arraycopy进行数组复制类似的, Arrays提供了一个copyOfRange方法进行数组复制。
不同的是System.arraycopy,需要事先准备好目标数组,并分配长度。 copyOfRange 只需要源数组就就可以了,通过返回值,就能够得到目标数组了。
除此之外,需要注意的是 copyOfRange 的第3个参数,表示源数组的结束位置,是取不到的。
这些代码仅供参考,要运行的话,最下面有全的
//1.数组复制
//Arrays.copyOfRange()比较一下System.arraycopy
int[] a = new int[] {18,62,66,87,8};
System.out.println("数组a:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
//参数一:原数组
//参数二:开始位置
//参数三:结束位置,取不到
int[] b = Arrays.copyOfRange(a, 0, 3);//取到三个数,0-2
System.out.println("数组b复制数组a前三个后:");
for (int i = 0; i < b.length; i++) {
System.out.print(b[i] + " ");
}
System.out.println();
如果要打印一个数组的内容,就需要通过for循环来挨个遍历,逐一打印。
但是Arrays提供了一个toString()方法,直接把一个数组,转换为字符串,这样方便观察数组的内容。
以下代码仅供参考,需要运行,请参照本类最下方代码
//2.转换成字符串
//Arrays.toString()
System.out.println("转换成字符串后:");
String content = Arrays.toString(a);//把数组a转换成字符串
System.out.println(content);
Arrays工具类提供了一个sort方法,只需要一行代码即可完成排序功能。
以下代码仅供参考,需要运行,请参照本类最下方代码
//3.排序
//Arrays.sort()
System.out.println("排序前:");
System.out.println(Arrays.toString(a));
Arrays.sort(a);
System.out.println("排序后:");
System.out.println(Arrays.toString(a));
查询元素出现的位置,
需要注意的是,使用binarySearch进行查找之前,必须使用sort进行排序,
如果数组中有多个相同的元素,查找结果是不确定的。
以下代码仅供参考,需要运行,请参照本类最下方代码
//4.搜索
//sort()和binarySearch()
//搜索前必须要进行sort排序
//前面已经排序好了,进行下一步,搜索
System.out.println("数字66所在的位置在" + Arrays.binarySearch(a, 66));
比较两个数组的内容是否一样,
第二个数组和第一个数组不一样,所以比较结果是false。
以下代码仅供参考,需要运行,请参照本类最下方代码
//5.判断是否相同
//equals
//前面有数组a和b,我们进行比较
System.out.println("数组a和数组b是否相同?" + Arrays.equals(a, b));
使用同一个值,填充整个数组
以下代码仅供参考,需要运行,请参照本类最下方代码
//6.填充,填充相同值
//fill()
int[] c = new int[10];
Arrays.fill(c, 6);
System.out.println("数组c填充后为:" + Arrays.toString(c));
需要运行请参照下方代码
和我一起敲代码,带你走上人生巅峰
package j2se;
import java.util.Arrays;
public class ArraysTest {
public static void main(String[] args) {
//1.数组复制
//Arrays.copyOfRange()比较一下System.arraycopy
int[] a = new int[] {18,62,66,87,8};
System.out.println("数组a:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
//参数一:原数组
//参数二:开始位置
//参数三:结束位置,取不到
int[] b = Arrays.copyOfRange(a, 0, 3);//取到三个数,0-2
System.out.println("数组b复制数组a前三个后:");
for (int i = 0; i < b.length; i++) {
System.out.print(b[i] + " ");
}
System.out.println();
//2.转换成字符串
//Arrays.toString()
System.out.println("转换成字符串后:");
String content = Arrays.toString(a);//把数组a转换成字符串
System.out.println(content);
//3.排序
//Arrays.sort()
System.out.println("排序前:");
System.out.println(Arrays.toString(a));
Arrays.sort(a);
System.out.println("排序后:");
System.out.println(Arrays.toString(a));
//4.搜索
//sort()和binarySearch()
//搜索前必须要进行sort排序
//前面已经排序好了,进行下一步,搜索
System.out.println("数字66所在的位置在" + Arrays.binarySearch(a, 66));
//5.判断是否相同
//equals
//前面有数组a和b,我们进行比较
System.out.println("数组a和数组b是否相同?" + Arrays.equals(a, b));
//6.填充,填充相同值
//fill()
int[] c = new int[10];
Arrays.fill(c, 6);
System.out.println("数组c填充后为:" + Arrays.toString(c));
}
}
敲的怎么样?会了吗?我们来道题目练练手。
首先定义一个5X8的二维数组,然后使用随机数填充满。
借助Arrays的方法对二维数组进行排序。
难点:
参考思路:
先把二维数组使用System.arraycopy进行数组复制到一个一维数组
然后使用sort进行排序
最后再复制回到二维数组。
关于随机数
0-100的 随机整数的获取办法有多种,下面是参考办法之一:
(int) (Math.random() * 100)
Math.random() 会得到一个0-1之间的随机浮点数,然后乘以100,并强转为整型即可。
代码在下方,请仔细思考后再看,这个在复制的时候还是一个小难点
package j2se;
import java.util.Arrays;
public class ArraysErWeiShuZuPaiXu {
public static void main(String[] args) {
//二维数组排序,取出所有数排在一起,排序然后放回
//定义一个5*8的二维数组,填充0-100随机数
int[][] a = new int[5][8];
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
a[i][j] = (int)(Math.random() * 100);//new Random().nextInt(100)
}
}
//打印初始二维数组
System.out.println("原始二维数组为:");
for (int i = 0; i < a.length; i++) {//5行,数组的行数
for (int j = 0; j < a[i].length; j++) {//8列,每行的个数,相当于列数
System.out.print(a[i][j] + "\t");
}
System.out.println();
}
System.out.println();
//用工具类打印二维数组
System.out.println(Arrays.deepToString(a));
//创建一个一维数组,用System.arraycopy将二维数组a复制进去
int[] b = new int[40];
for (int i = 0; i < a.length; i++) {//将数组a一行一行复制给数组b,次数是行数a.length
//从a[i]初始值开始复制,复制到数组b的第i(行数)* a[i].length(列数)位,每次复制的长度是一个列长a[i].length
System.arraycopy(a[i], 0, b, i * a[i].length, a[i].length);
}
System.out.println(Arrays.toString(b));//打印一维数组b
//用工具类进行排序
Arrays.sort(b);
//将排序好的数组复制到原来的二维数组
for (int i = 0; i < a.length; i++) {
//从数组b的第i(行)* a[i].length(列数)开始复制,复制到数组a的第i行第0位。每次复制的长度为一个列长a[i].length
System.arraycopy( b, i * a[i].length, a[i], 0, a[i].length);
}
System.out.println(Arrays.deepToString(a));//打印二维数组a
}
}