`
SnowLotus
  • 浏览: 74031 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Arrays类

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

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


    名  称                                      说  明


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


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


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


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


以下范例示范了使用Arrays来进行数组的排序与搜索。
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 位置



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

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

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

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);

    }   

}



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

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

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

    名&nbsp;&nbsp;&nbsp;称 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说  明


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


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



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

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.Arrays的API文件说明,看看有没有现成的方法可以使用。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics