Arrays工具类的使用以及一个小练习的难点

Arrays工具类的使用

  • Arrays的使用
    • Arrays的定义
    • 数组复制
    • 转换成字符串
    • 排序
    • 搜索
    • 判断是否相等
    • 填充
    • 上述代码汇总
  • 二维数组排序练习

Arrays的使用

Arrays的定义

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的方法对二维数组进行排序。

难点:

  1. 如何对二维数组进行排序?
  2. 如果有第三个一维数组参与,如何进行复制?
  3. 复制的时候要考虑什么?

参考思路:

先把二维数组使用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
		
	}
}

你可能感兴趣的:(Java基础)