数组操作必备:Arrays类的实用方法和技巧

2023-11-23 10:42:45 浏览数 (1)


theme: healer-readable

highlight: a11y-dark


哈喽,各位小伙伴们,你们好呀,我是喵手。

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  在Java中,数组是一种非常常见的数据结构,Arrays类是Java提供的处理数组的工具类。Arrays类提供了一系列排序、查找、比较等操作数组的方法,使用Arrays类可以方便快捷地操作数组。本文将从源代码解析、应用场景案例、优缺点分析等方面来探讨Arrays类的使用。

摘要

  本文将介绍Java中的Arrays类,包括其实现原理、应用场景、优缺点分析等。同时,本文还会提供详细的类代码方法介绍和测试用例。

Arrays类

简介

  Java中的Arrays类是Java提供的一个工具类,用于处理数组。Arrays类提供了一系列操作数组的静态方法,比如说对数组排序(sort)、二分查找(binarySearch)等。Arrays类中的方法都是静态的,可以直接调用。

  Arrays类是Java中的一个常用类,其提供的方法可以方便地对数组进行操作。Java中的Arrays类实现了Arrays接口,Arrays接口中定义了一些常用的方法,比如复制数组等。Arrays类使用Arrays接口中的方法来实现对数组的操作。

源代码解析

  Java中的Arrays类源代码非常简单,下面是Java 11中的Arrays类的源代码:

代码语言:java复制
public class Arrays {
    // 私有构造函数
    private Arrays() {}
    // 省略若干静态方法
}
在这里插入图片描述在这里插入图片描述

  Arrays类是一个final类,不能被继承,而且其构造方法是私有的。因此,不能通过new操作符来创建Arrays的实例。Arrays类提供了很多静态方法,下面列举一些常用的方法:

  • sort:对数组进行排序
  • binarySearch:在有序数组中查找指定元素
  • equals:比较两个数组是否相等
  • toString:返回数组的字符串表示形式

下面是sort方法的源代码:

代码语言:java复制
public static void sort(int[] a) {
    dualPivotQuicksort(a, 0, a.length - 1, null, 0, 0);
}

  sort方法使用双轴快速排序算法对整型数组进行排序。双轴快速排序是快速排序的一种优化,其实现原理比较复杂,这里不做详细介绍。需要注意的是,sort方法会改变原数组的元素顺序,因此需要注意备份。

在这里插入图片描述在这里插入图片描述

应用场景案例

Arrays类提供的方法广泛应用于Java开发中,下面简单介绍一些应用场景案例。

数组排序

排序是数组常见的操作之一,Arrays类提供了sort方法来对数组进行排序。下面是一个排序的示例代码:

代码语言:java复制
int[] arr = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
// 输出:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

数组查找

  当需要在数组中查找指定元素时,可以使用Arrays类的binarySearch方法。前提条件是数组必须是有序的,否则将返回不可预测的结果。下面是使用binarySearch方法查找元素的示例代码:

代码语言:java复制
int[] arr = {1, 2, 3, 4, 5};
int index = Arrays.binarySearch(arr, 3);
System.out.println(index); // 输出:2

数组复制

  当需要复制数组时,可以使用Arrays类的copyOf方法或copyOfRange方法。copyOf方法用于复制整个数组,copyOfRange方法用于复制数组的一部分。下面是使用copyOf以及copyOfRange方法对数组进行复制的示例代码:

代码语言:java复制
int[] arr = {1, 2, 3, 4, 5};
int[] newArr1 = Arrays.copyOf(arr, arr.length);
int[] newArr2 = Arrays.copyOfRange(arr, 2, 4);
System.out.println(Arrays.toString(newArr1)); // 输出:[1, 2, 3, 4, 5]
System.out.println(Arrays.toString(newArr2)); // 输出:[3, 4]

数组填充

  当需要将数组中的元素全部设为同一个值时,可以使用Arrays类的fill方法。下面是一个使用fill方法对数组进行填充的示例代码:

代码语言:java复制
int[] arr = new int[5];
Arrays.fill(arr, 1);
System.out.println(Arrays.toString(arr)); // 输出:[1, 1, 1, 1, 1]

优缺点分析

优点

  • Arrays类提供的方法可以方便快捷地对数组进行操作,比如说排序、查找、复制、填充等。
  • Arrays类中的方法都是静态的,可以直接调用,使用起来非常方便。

缺点

  • Arrays类提供的方法大多是处理数组的基本操作,对于一些高级操作,需要自己实现。

类代码方法介绍

  Arrays类提供了大量的静态方法,这里只介绍几个常用的方法。

sort方法

  sort方法用于对数组进行排序,其定义如下:

代码语言:java复制
public static void sort(int[] a)

  sort方法使用双轴快速排序算法对整型数组进行排序。注意,sort方法会改变原数组的元素顺序,因此需要注意备份。

binarySearch方法

  binarySearch方法用于在有序数组中查找指定元素的索引,其定义如下:

代码语言:java复制
public static int binarySearch(int[] a, int key)

  binarySearch方法采用二分查找算法进行查找,返回值为指定元素在数组中的索引,如果不存在,则返回负数。需要注意的是,数组必须是有序的,否则将返回不可预测的结果。

copyOf方法

  copyOf方法用于复制整个数组,其定义如下:

代码语言:java复制
public static int[] copyOf(int[] original, int newLength)

  copyOf方法返回一个新的数组,其长度为newLength,如果newLength小于原数组的长度,则截取原数组的前newLength个元素。如果newLength大于原数组的长度,则在原数组后面添加0。

fill方法

  fill方法用于将数组中的元素全部设为同一个值,其定义如下:

代码语言:java复制
public static void fill(int[] a, int val)

  fill方法将数组a中的元素全部设为val。

测试用例

  下面是一个测试示例代码,以帮助同学们更深入地掌握其类:

测试代码演示

代码语言:java复制
package com.example.javase.se.classes;

import java.util.Arrays;

/**
 * @Author ms
 * @Date 2023-11-01 19:02
 */
public class ArraysTest {
    public static void main(String[] args) {
        testSort();
        testBinarySearch();
        testCopyOf();
        testFill();
    }

    public static void testSort() {
        int[] arr = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
        int[] expectedArr = {1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9};
        Arrays.sort(arr);
        if (!Arrays.equals(expectedArr, arr)) {
            throw new AssertionError();
        }
    }

    public static void testBinarySearch() {
        int[] arr = {1, 2, 3, 4, 5};
        if (Arrays.binarySearch(arr, 3) != 2) {
            throw new AssertionError();
        }
    }

    public static void testCopyOf() {
        int[] arr = {1, 2, 3, 4, 5};
        int[] newArr = Arrays.copyOf(arr, 3);
        if (!Arrays.equals(new int[]{1, 2, 3}, newArr)) {
            throw new AssertionError();
        }
    }

    public static void testFill() {
        int[] arr = new int[5];
        Arrays.fill(arr, 1);
        if (!Arrays.equals(new int[]{1, 1, 1, 1, 1}, arr)) {
            throw new AssertionError();
        }
    }
}

测试结果

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述在这里插入图片描述

测试代码分析

  根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。

  如上测试用例主要介绍了 Java 中的 Arrays 类,其中包括了排序、二分查找、复制和填充等常用方法。

  在使用排序方法 Arrays.sort() 时,可直接对数组进行排序,不需要自己编写排序算法。

  在使用二分查找方法 Arrays.binarySearch() 时,需要先对数组进行排序,才能正确查找目标元素。

  在使用复制方法 Arrays.copyOf() 时,需要指定要复制的数组和要复制的元素个数,它会返回一个新的数组。

  在使用填充方法 Arrays.fill() 时,可以将数组中的所有元素填充为指定的值。

  在编写代码时,我们应该根据实际需要选择合适的方法,并正确使用 API 提供的参数和返回值。

小结

  本文介绍了 Java 中的 Arrays 类,Arrays 类提供的方法可以方便快捷地对数组进行操作,比如说排序、查找、复制、填充等。Arrays 类中的方法都是静态的,可以直接调用,使用起来非常方便。本文从源代码解析、应用场景案例、优缺点分析等方面对 Arrays 类进行了探讨,并提供了详细的类代码方法介绍和测试用例。最后提醒大家,在使用 Arrays 类的方法时,需要根据实际需要选择合适的方法,并正确使用 API 提供的参数和返回值。

总结

  总之,Java中的Arrays类是一个方便快捷地操作数组的工具类。它提供了许多静态方法,可以直接调用,包括排序、查找、复制、填充等常用方法。通过本篇文章的源代码解析、应用场景案例、优缺点分析以及测试用例的介绍,相信读者对Arrays类的使用已经有了更加深入的了解。在实际开发中,我们可以根据实际需要选择合适的方法,并正确使用API提供的参数和返回值。最终,让我们善加利用Arrays类,写出更加简洁、高效、可读性强的代码吧。

... ...

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

... ...

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!

***

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞