我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java中怎么比较2个数组相等以及检出不匹配项

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java中怎么比较2个数组相等以及检出不匹配项

这篇文章主要讲解了“Java中怎么比较2个数组相等以及检出不匹配项”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中怎么比较2个数组相等以及检出不匹配项”吧!

提问:“如何比较 2 个数组相等以及如何检出不匹配项?”严格意义上讲,这是 2  个问题,其一是比较数组是否相等,其二是如果数组不相等,是哪几个元素导致的。

01、比较数组是否相等

可以通过 Arrays.equals() 方法来比较 2  个数组是否相等,数组可以是基本数据类型,也可以是引用数据类型,以及泛型。我们就先拿字符串来作为示例吧。

String [] str1 = {"沉","默", "王","二"}; String [] str2 = {"沉","默", "王","二"}; String [] str3 = {"沉","默", "王","三"};

现在,就让我们来比较一下:str1 是否与 str2 相等,str1 是否与 str3  相等。(尽管不用代码比较你都能猜出答案,但还是请假装配合一下)

String[] str1 = {"沉", "默", "王", "二"}; String[] str2 = {"沉", "默", "王", "二"}; String[] str3 = {"沉", "默", "王", "三"};  System.out.println(Arrays.equals(str1, str2)); System.out.println(Arrays.equals(str1, str3));

程序输出的结果如下所示:

true false

不错不错,和我们的预期完全相符。另外,我们还可以通过以下方法来判断 2 个数组中指定的范围是否相等:

boolean equals(Object[] a, int aFromIndex, int aToIndex,                          Object[] b, int bFromIndex, int bToIndex)

来比较一下 str1 和 str3 中前 3 个元素是否相等:

System.out.println(Arrays.equals(str1, 0, 3, str3, 0, 3));

程序输出的结果如下所示:

true

现在,让我们来自定义一个类 Writer,它有两个字段:int 类型的 age,和 String 类型的 name,并重写了 equals() 和  hashCode() 方法。

public class Writer {     private int age;     private String name;      @Override     public boolean equals(Object o) {         if (this == o) return true;         if (o == null || getClass() != o.getClass()) return false;         Writer writer = (Writer) o;         return age == writer.age &&                 Objects.equals(name, writer.name);     }      @Override     public int hashCode() {         return Objects.hash(age, name);     }      public Writer(int age, String name) {         this.age = age;         this.name = name;     }      // getter/setter }

来创建 3 个 Writer 类型的数组:

Writer [] writer1 = {new Writer(18,"沉默王二"),new Writer(16,"沉默王三")}; Writer [] writer2 = {new Writer(18,"沉默王二"),new Writer(16,"沉默王三")}; Writer [] writer3 = {new Writer(18,"沉默王一"),new Writer(16,"沉默王三")};

我们来比较一下:writer1 是否与 writer2 相等,writer1 是否与 writer3 相等。

System.out.println(Arrays.equals(writer1,writer2)); System.out.println(Arrays.equals(writer1,writer3));

程序输出的结果如下所示:

true false

答案完全符合预期,因为我们重写了 equals() 方法——如果 age 相等,name 相等,那就表明 2 个 Writer  对象相等。假如我们没有重写该方法,此时就可以借助 Comparator 比较器。

Comparator<Writer> byAge = Comparator.comparing(Writer::getAge); Comparator<Writer> byName = Comparator.comparing(Writer::getName);

byAge 是通过 Writer 的 age 比较的,byName 是通过 Writer 的 name 比较的。然后我们来通过比较器 byAge 和  byName 比较一下 writer1 和 writer3。

System.out.println(Arrays.equals(writer1, writer3, byAge)); System.out.println(Arrays.equals(writer1, writer3, byName));

程序输出的结果如下所示:

true false

答案完全符合预期,writer1 数组中的 age(18 和 16)和 writer3 数组中的 age(18 和 16)完全相同;writer1  数组中的 name(沉默王二和沉默王三)和 writer3 数组中的 name(沉默王一和沉默王三)不完全相同。

02、检出不匹配项

可以通过 Arrays.mismatch() 方法检出 2 个数组中哪几个元素不相等。如果 2 个数组完全相等,该方法返回  -1;否则的话,返回第一个不匹配项目的下标。

先来看看 str1 和 str2 是否有不相等的元素吧。

System.out.println(Arrays.mismatch(str1, str2));

程序输出的结果如下所示:

-1

和我们预期的结果一致,因为 str1 和 str2 没有不匹配项。那再来看看 str1 和 str3 吧。

System.out.println(Arrays.mismatch(str1, str3));

程序输出的结果如下所示:

3

的确是从下标为 3 的元素开始不匹配的,因为 str1 中下标为 3 的元素为“二”,str3 中下标为 3 的元素为“三”。

Arrays.mismatch() 方法同样适用于自定义类型 Writer。

System.out.println(Arrays.mismatch(writer1,writer2)); System.out.println(Arrays.mismatch(writer1,writer3));

程序输出的结果如下所示:

-1 0

和我们预期的结果一致,因为 writer1 和 writer2 没有不匹配项,writer1 和 writer3 不相等的元素是从第 1 开始的,下标为  0。

也可以通过 Comparator 来检出不相等的元素:

System.out.println(Arrays.mismatch(writer1, writer3, byAge)); System.out.println(Arrays.mismatch(writer1, writer3, byName));

程序输出的结果如下所示:

-1 0

感谢各位的阅读,以上就是“Java中怎么比较2个数组相等以及检出不匹配项”的内容了,经过本文的学习后,相信大家对Java中怎么比较2个数组相等以及检出不匹配项这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java中怎么比较2个数组相等以及检出不匹配项

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

目录