首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

5.2.2 Arrays

对数组的一些基本操作,像排序、搜索与比较等是很常见的。在Java中提供了Arrays类可以协助您作这几个操作,Arrays类位于java.util包中,它提供了几个方法可以直接使用,如表5-2所示。

5-2  Arrays类提供的几个方法说明

名  称

说  明

sort()

帮助您对指定的数组排序,所使用的是快速排序法

binarySearch()

让您对已排序的数组进行二元搜索,如果找到指定的值就返回该值所在的索引,否则就返回负值

fill()

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

equals()

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

范例5.12示范了使用Arrays来进行数组的排序与搜索。

Ü 范例5.12  ArraysMethodDemo.java

import java.util.Scanner;

import java.util.Arrays;

 

public class ArraysMethodDemo {

    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

请输入搜索值: 7

找到值于索引 3 位置

 

范例5.13示范了使用Arrays来进行数组的填充与比较。

Ü 范例5.13  ArraysMethodDemo2.java

import java.util.Arrays;

 

public class ArraysMethodDemo2 {

    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

 

注意,不可以用==来比较两个数组的元素值是否相等==使用于对象比对时,是用来比对两个对象名称是否引用自同一个对象。范例5.14是这个概念的实际示范。

Ü 范例5.14  TestArrayValue.java

public class TestArrayValue {

    public static void main(String[] args) {

        int[] arr1 = {1, 2, 3, 4, 5};

        int[] arr2 = {1, 2, 3, 4, 5};

 

        int[] tmp = arr1;

 

        System.out.println(arr1 == tmp);

        System.out.println(arr2 == tmp);

    }   

}

在范例5.14中,虽然arr1arr2中的元素值是相同的,但实际上arr1arr2是引用自不同的两个数组对象。您将arr1指定给tmp来引用,由于tmparr1是引用同一数组对象,所以进行==比较时会显示true;而tmparr2是引用自不同数组对象,所以进行==比较时会显示false。执行结果如下:

 

true

false

 

J2SE 5.0中对Arrays类作了不少的修改与功能增加,由此可见数组操作在程序中的重要性。这里介绍Arrays中新增的两个方法:deepEquals() deepToString(),如表5-3所示。

5-3  Arrays类新增的两个方法说明

名  称

说  明

deepEquals()

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

deepToString()

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

范例5.15是一个简单示范,它对两个三维数组进行深层比较与深层输出。

Ü 范例5.15  NewArraysDemo.java

import java.util.Arrays;

 

public class NewArraysDemo {

    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 内容等于 arr2 ? " +

                            Arrays.deepEquals(arr1, arr2));

        System.out.println("arr1 内容等于 arr3 ? " +

                            Arrays.deepEquals(arr1, arr3));

        System.out.println("arr1 deepToString()\n\t" +

                            Arrays.deepToString(arr1));

    }

}

执行结果:

 

arr1 内容等于 arr2 ? true

arr1 内容等于 arr3 ? false

arr1 deepToString()

        [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

 

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