ITEEDU

Java Gossip: Arrays 类别

数组中基本操作的排序、搜寻与比较等动作是很常见的,在Java中提供了Arrays类别可以协助您作这几个动作,Arrays类别位于java.util套件中,它提供了几个静态方法可以直接呼叫使用。

sort()

这个方法可以帮助您对指定的数组排序,所使用的是快速排序法

binarySearch()

这个方法可以让您对已排序的数组进行二元搜寻,如果找到指定的值就传回该值所 在的索引,否则就么回负值

fill()

当我们配置一个数组之后,其会依数据型态来给定默认值,例如整数数组就初始为 0,您可以使用Arrays.fill()方法来将所有的元素设定为指定的值

equals()

比较两个数组中的元素值是否全部相等,如果是将传回true,否则传回 false

下面这个程序示范数组的排序与搜寻:

UseArrays.java
import java.util.Scanner;
import java.util.Arrays;
public class UseArrays {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int[] arr = {93, 5, 3, 55, 57, 7, 2 ,73, 41, 91};
		System.out.print("排序前: ");
		for(int i = 0; i < arr.length; i++)
		System.out.print(arr[i] + " ");
		System.out.println();
		Arrays.sort(arr);
		System.out.print("排序后: ");
		for(int i = 0; i < arr.length; i++)
		System.out.print(arr[i] + " ");
		System.out.print("\n请输入搜寻值: ");
		int key = scanner.nextInt();
		int find = -1;
		if((find = Arrays.binarySearch(arr, key)) > -1) {
			System.out.println("找到值于索引 " +find + " 位置");
		}
		else
		System.out.println("找不到指定值");
	}
}

执行结果:

排序前: 93 5 3 55 57 7 2 73 41 91 
排序后: 2 3 5 7 41 55 57 73 91 93 
请输入搜寻值: 3 
找到值于索引 1 位置?

下面这个程序示范数组的填充与比较:

UseArrays.java
import java.util.Arrays;

public class UseArrays {
	public static void main(String args[]) {
		int[] arr1 = new int[10];
		int[] arr2 = new int[10];
		int[] arr3 = new int[10];

		Arrays.fill(arr1, 5);
		Arrays.fill(arr2, 5);
		Arrays.fill(arr3, 10);

		System.out.print("arr1: ");
		for(int i = 0; i < arr1.length; i++)
		System.out.print(arr1[i] + " ");

		System.out.println("\narr1 = arr2 ? " +
		Arrays.equals(arr1, arr2));
		System.out.println("arr1 = arr3 ? " +
		Arrays.equals(arr1, arr3));
	}
}

执行结果:

arr1: 5 5 5 5 5 5 5 5 5 5 
arr1 = arr2 ? true 
arr1 = arr3 ? false 

请注意到,您不可以用==来比较两个数组的元素值是否相等,==使用于对象比对时,是用来比对两个对象名称是否参考至同一个对象,下面这个程序是个简单的 示范:

TestEqual.java
public class TestEqual {
	public static void main(String[] args) {
		int[] arr1 = new int[5];
		int[] arr2 = new int[5];
		int[] tmp = arr1;
		System.out.println(arr1 == tmp);
		System.out.println(arr2 == tmp);
	}
}

执行结果:

true
false

事实上,J2SE 5.0 对Arrays类别作了不少的修改与新增,由此可见数组操作在程序中的重要性,这边介绍Arrays新增的两个方法:deepEquals()与deepToString()。

deepEquals()

对数组作深层比较,简单的说,您可以对二维仍至三维以上的数组进行比较是否相 等

deepToString()

将数组值作深层输出,简单的说,您可以对二维仍至三维以上的数组输出其字符串值

直接来看个程序比较清楚:

UseArrays.java
import java.util.Arrays;
public class UseArrays {
	public static void main(String args[]) {
		int[][] arr1 = {{1, 2, 3},
			{4, 5, 6},
			{7, 8, 9}};
		int[][] arr2 = {{1, 2, 3},
			{4, 5, 6},
			{7, 8, 9}};
		int[][] arr3 = {{0, 1, 3},
			{4, 6, 4},
			{7, 8, 9}};
		System.out.println("arr1 equals arr2? " +
		Arrays.deepEquals(arr1, arr2));
		System.out.println("arr1 equals arr3? " +
		Arrays.deepEquals(arr1, arr3));
		System.out.println("arr1 deepToString()\n\t" +
		Arrays.deepToString(arr1));
	}
}

执行结果:

arr1 equals arr2? true
arr1 equals arr3? false
arr1 deepToString()
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

当然Arrays并不只有以上介绍的功能,总之,如果您之前对Arrays没这么的重视,在J2SE 5.0之后,您可以多关照它几眼,如果您有数组操作方面的相关需求,可以先查查 java.util.Arrays 的API文件。