行业资讯 2025年08月6日
0 收藏 0 点赞 275 浏览 2413 个字
摘要 :

文章目录 1.如何进行数组比较? 2.使用java.util.Arrays检查数组相等性 2.1. API方法 2.2. 简单数组 2.3. 二维数组 3.使用 ‘For-Loop’ 进行数组比较 4.使……




  • 1.如何进行数组比较
  • 2.使用java.util.Arrays检查数组相等
    • 2.1. API方法
    • 2.2. 简单数组
    • 2.3. 二维数组
  • 3.使用 ‘For-Loop’ 进行数组比较
  • 4.使用Stream API进行数组比较
  • 5.结论

学习在Java中使用不同技巧比较两个数组。我们将学习从使用简单的for循环到使用内置的Java API进行比较数组是否相等。

1.如何进行数组比较?

在Java或任何其他编程语言中,比较两个数组的基本原理都是相同的。两个数组相等的条件是:

  • 它们都可以是null或非null。
  • 它们都是相同类型的。
  • 它们都有相等数量的项。
  • 它们在相应索引处具有相同顺序的相同项。
  • 如果两个数组都是多维的,那么内部数组也需要相等。

现在我们知道了什么会使两个数组相等,编写一个检查它们是否相等的函数就很容易了。

2.使用java.util.Arrays检查数组相等性

2.1. API方法

对于任何问题,如果在JDK中有可用的Java API,总是首选使用它而不是自己编写。只有在有非常强烈的理由时才应编写新函数,否则使用内置的API。

Arrays类提供了许多用于操作数组的有用方法。为了检查数组是否相等,它提供了两个方法,具有多个重载形式以接受不同的数组类型:

  • public static boolean equals(array1, array2):如果array1和array2相等,即它们包含相同顺序的相同元素,则返回true。
  • public static boolean equals(array1, array2, comparator):如果array1和array2相等,则返回true。如果comparator.compare(e1, e2) == 0,则认为两个数组项e1和e2相等。
  • public static boolean deepEquals(array1, array2):如果array1和array2彼此深度相等,则返回true。此方法适用于任意深度的嵌套数组。

2.2. 简单数组

简单数组是不嵌套的1-D数组。在简单数组中,我们可以包含任何类型的项,因此有必要了解如何处理它们。

  • 基本类型和字符串数组:基本类型和字符串始终按其值进行比较,因此我们可以安全地使用equals() API。
  • 对象类型:在这种情况下,我们需要知道如何检查两个数组项是否相等。如果要使用默认对象相等性,或者类已经重写了Object.equals()方法,那么我们可以使用Arrays.equals(),否则我们必须使用带有自定义对象相等性逻辑的API的Comparator版本。
String[] a1 = {\"A\", \"B\", \"C\"};
String[] a2 = {\"A\", \"B\", \"C\"};
String[] a3 = {\"X\", \"Y\", \"Z\"};
boolean matches = Arrays.equals(a1, a2);  //true
matches = Arrays.equals(a1, a3);  //false

2.3. 二维数组

要检查二维数组的相等性,我们必须使用deepEquals() API。

需要注意的是,deepEquals() 只适用于对象类型,因此不能用于基本类型数组,但我们可以用它来比较任何简单或嵌套数组。

String[][] a4 =
    {
        {\"A\", \"B\", \"C\"},
        {\"X\", \"Y\", \"Z\"}
    };
String[][] a5 =
    {
        {\"A\", \"B\", \"C\"},
        {\"X\", \"Y\", \"Z\"}
    };
boolean matches = Arrays.deepEquals(a4, a5);  //true

3.使用 ‘For-Loop’ 进行数组比较

如果由于某种原因我们无法使用Arrays类,我们可以编写自己的方法并在其中添加自定义逻辑。

例如,如果我们不希望在两个数组都为null时声明它们相等,那么我们可以编写自己的函数,在其中使用for循环遍历数组项并逐一比较这些项。也可能会有其他更有说服力的原因。

在以下的checkArrayEqualityWithForLoop()方法中,我们正在编写用于检查两个简单数组相等性的代码。您可以随意修改逻辑以满足您的需求。

public static boolean checkArrayEqualityWithForLoop(String[] a1,
                                                    String[] a2) {
    if (a1 == a2) {
      return true;
    }
    if (a1 == null || a2 == null) {
      return false;
    }
    int n = a1.length;
    if (n != a2.length) {
      return false;
    }
    for (int i = 0; i < n; i++) {
      if (!a1[i].equals(a2[i])) {
        return false;
      }
    }
    return true;
}

4.使用Stream API进行数组比较

为了使代码更易读,我们可以在for循环的位置使用Stream API的IntStream.range()。其余的逻辑与之前的示例相同。

public static boolean checkEqualityWithStream(String[] a1, String[] a2) {
    if (a1 == a2) {
      return true;
    }
    if (a1 == null || a2 == null || a1.length != a2.length) {
      return false;
    }
    return IntStream.range(0, a1.length).allMatch(i -> a1[i].equals(a2[i]));
}

5.结论

在本教程中,我们学习了如何在Java中检查两个数组是否相等。我们了解了检查简单数组和二维数组相等性的规则。此外,我们学习了如何使用Object.equals()和Comparator来处理数组项的相等性。

最后,我们学习了如何使用Java API以及如何使用简单的for循环来自定义数组相等性逻辑。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9250.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号