编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

Java的Arrays工具类

  • 使用Arrays的sort()方法排序

在前面学习数组时,要想对数组进行排序就需要自定义一个排序方法,其实也可以使用Arrays工具类中的静态方法sort()来实现这个功能。接下来通过一个案例来学习sort()方法的使用,如例所示。

import java.util.Arrays;
public class Example {
    public static void main(String[] args) {
        int[] arr = { 9, 8, 3, 5, 2 }; // 初始化一个数据
        System.out.print("排序前: ");
        printArray(arr); // 打印原数组
        Arrays.sort(arr); // 调用Arrays 的sort 方法排序
        System.out.print("排序后: ");
        printArray(arr);
    }
    public static void printArray(int[] arr) { // 定义打印数组方法
        System.out.print("[");
        for (int x = 0; x < arr.length; x++) {
            if (x != arr.length - 1) {
                System.out.print(arr[x] + ",");
            } else {
                System.out.println(arr[x] + "]");
            }
        }
    }
}

运行结果:

排序前: [9,8,3,5,2]
排序后: [2,3,5,8,9]
  • 使用Arrays的binarySearch(Object[] a,Object key)方法查找元素

程序开发中,经常会在数组中查找某些特定的元素,如果数组中元素较多时查找某个元素就会非常烦琐。为此,Arrays类中还提供了一个方法binarySearch(Object[] a, Object key)用于查找元素,接下来通过一个案例来学习该方法的使用,如例所示。

import java.util.Arrays;
public class Example {
    public static void main(String[] args) {
        int[] arr = { 9, 8, 3, 5, 2 };
        Arrays.sort(arr); // 调用排序方法,对数组排序{2,3,5,8,9}
        int index = Arrays.binarySearch(arr, 3); // 查找指定元素3
        System.out.println("数组排序后元素3 的索引是:" + index);// 输出打印元素所在的索引位置
    }
}

运行结果:

数组排序后元素3 的索引是:1

从运行结果可以看出,使用Arrays的binarySearch(Object[] a,Object key)方法查找出了3在数组中的索引为1。需要注意的是,binarySearch()方法只能针对排序后的数组进行元素的查找,因为该方法采用的是二分法查找。所谓二分法查找,就是每次将指定元素和数组中间位置的元素进行比较,从而排除掉其中的一半元素,这样的查找是非常高效的。接下来通过一个图例来演示二分法查找元素的过程,如图所示。

二分法查找元素的过程

图中的start、end和mid(mid=(start+end)/2)分别代表在数组中查找区间的开始索引、结束索引和中间索引,假设查找的元素为key,接下来分步骤讲解元素的查找过程。

第一步,判断开始索引start和结束索引end,如果start<=end,则key和arr[mid]进行比较;如果两者相等,说明找到了该元素;如果不相等,则返回元素arr[mid]。

第二步,将key和arr[mid]继续进行比较,如果key<arr[mid],表示查找的值处于索引start和mid之间,这时执行第三步,否则表示要查找的值处于索引mid和end之间,执行第四步。

第三步,将查找区间的结束索引end置为mid-1,继续查找,直到start>end,表示查找的数组不存在,这时执行第五步。

第四步,将查找区间的开始索引start置为mid+1,结束索引不变,继续查找,直到start>end,表示查找的数组不存在,这时执行第五步。

第五步,返回“(插入点)-1”。这个“插入点”指的是大于key值的第一个元素在数组中的位置,如果数组中所有的元素值都小于要查找的对象,“插入点”就等于Arrays.size()。

  • 使用Arrays的copyOfRange(int[] original, int from,int to)方法拷贝元素

在程序开发中,经常需要在不破坏原数组的情况下使用数组中的部分元素,这时可以使用Arrays工具类的copyOfRange(int[] original, int from, int to)方法将数组中指定范围的元素复制到一个新的数组中,该方法中参数original表示被复制的数组,from 表示被复制元素的初始索引(包括),to表示被复制元素的最后索引(不包括),接下来通过一个案例来学习如何拷贝数组,如例所示。

import java.util.Arrays;
public class Example {
    public static void main(String[] args) {
        int[] arr = { 9, 8, 3, 5, 2 };
        int[] copied = Arrays.copyOfRange(arr, 1, 7);
        for (int i = 0; i < copied.length; i++) {
            System.out.print(copied[i] + " ");
        }
    }
}

运行结果:

8 3 5 2 0 0

例中,使用Arrays的copyOfRange(arr,1,7)方法将数组{9,8,3,5,2}中从arr1到arr6这6个元素复制到新数组copied中,由于原数组arr的最大索引为4,因此只有arr[1]到arr[4]这四个元素8,3,5,2复制到了新数组copied中,另外两个元素放入了默认值0。

  • 使用Arrays的fill(Object[] a,Object val)方法填充元素

程序开发中,经常需要用一个值替换数组中的所有元素,这时可以使用Array的fill(Object[] a,Object val)方法,该方法可以将指定的值赋给数组中的每一个元素,接下来通过一个案例来演示如何填充元素,如例所示。

import java.util.Arrays;
public class Example {
    public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4 };
        Arrays.fill(arr, 8); // 用8 替换数组中的每一个值
        for (int i = 0; i < arr.length; i++) {
            System.out.println(i + ": " + arr[i]);
        }
    }
}

运行结果:

0: 8
1: 8
2: 8
3: 8
  • 使用Arrays的toString(int[] arr)方法把数组转换为字符串

在程序开发中,经常需要把数组以字符串的形式输出,这时就可以使用Arrays工具类的另一个方法toString(int[] arr)。需要注意的是,该方法并不是对Object类toString()方法的重写,只是用于返回指定数组的字符串形式。接下来通过一个案例来演示如何将数组转换为字符串,如例所示。

import java.util.Arrays;
public class Example {
    public static void main(String[] args) {
        int[] arr = { 9, 8, 3, 5, 2 };
        String arrString = Arrays.toString(arr); // 使用toString()方法将数组转换为字符串
        System.out.println(arrString);
    }
}

运行结果:

[9, 8, 3, 5, 2]


未经允许不得转载: 技术文章 » Java编程 » Java的Arrays工具类