溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中怎么比較2個(gè)數(shù)組相等以及檢出不匹配項(xiàng)

發(fā)布時(shí)間:2021-11-05 13:55:07 來源:億速云 閱讀:296 作者:iii 欄目:web開發(fā)

這篇文章主要講解了“Java中怎么比較2個(gè)數(shù)組相等以及檢出不匹配項(xiàng)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java中怎么比較2個(gè)數(shù)組相等以及檢出不匹配項(xiàng)”吧!

提問:“如何比較 2 個(gè)數(shù)組相等以及如何檢出不匹配項(xiàng)?”嚴(yán)格意義上講,這是 2  個(gè)問題,其一是比較數(shù)組是否相等,其二是如果數(shù)組不相等,是哪幾個(gè)元素導(dǎo)致的。

01、比較數(shù)組是否相等

可以通過 Arrays.equals() 方法來比較 2  個(gè)數(shù)組是否相等,數(shù)組可以是基本數(shù)據(jù)類型,也可以是引用數(shù)據(jù)類型,以及泛型。我們就先拿字符串來作為示例吧。

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

現(xiàn)在,就讓我們來比較一下:str1 是否與 str2 相等,str1 是否與 str3  相等。(盡管不用代碼比較你都能猜出答案,但還是請(qǐng)假裝配合一下)

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

程序輸出的結(jié)果如下所示:

true false

不錯(cuò)不錯(cuò),和我們的預(yù)期完全相符。另外,我們還可以通過以下方法來判斷 2 個(gè)數(shù)組中指定的范圍是否相等:

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

來比較一下 str1 和 str3 中前 3 個(gè)元素是否相等:

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

程序輸出的結(jié)果如下所示:

true

現(xiàn)在,讓我們來自定義一個(gè)類 Writer,它有兩個(gè)字段: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 }

來創(chuàng)建 3 個(gè) Writer 類型的數(shù)組:

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

程序輸出的結(jié)果如下所示:

true false

答案完全符合預(yù)期,因?yàn)槲覀冎貙懥?equals() 方法——如果 age 相等,name 相等,那就表明 2 個(gè) Writer  對(duì)象相等。假如我們沒有重寫該方法,此時(shí)就可以借助 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));

程序輸出的結(jié)果如下所示:

true false

答案完全符合預(yù)期,writer1 數(shù)組中的 age(18 和 16)和 writer3 數(shù)組中的 age(18 和 16)完全相同;writer1  數(shù)組中的 name(沉默王二和沉默王三)和 writer3 數(shù)組中的 name(沉默王一和沉默王三)不完全相同。

02、檢出不匹配項(xiàng)

可以通過 Arrays.mismatch() 方法檢出 2 個(gè)數(shù)組中哪幾個(gè)元素不相等。如果 2 個(gè)數(shù)組完全相等,該方法返回  -1;否則的話,返回第一個(gè)不匹配項(xiàng)目的下標(biāo)。

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

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

程序輸出的結(jié)果如下所示:

-1

和我們預(yù)期的結(jié)果一致,因?yàn)?str1 和 str2 沒有不匹配項(xiàng)。那再來看看 str1 和 str3 吧。

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

程序輸出的結(jié)果如下所示:

3

的確是從下標(biāo)為 3 的元素開始不匹配的,因?yàn)?str1 中下標(biāo)為 3 的元素為“二”,str3 中下標(biāo)為 3 的元素為“三”。

Arrays.mismatch() 方法同樣適用于自定義類型 Writer。

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

程序輸出的結(jié)果如下所示:

-1 0

和我們預(yù)期的結(jié)果一致,因?yàn)?writer1 和 writer2 沒有不匹配項(xiàng),writer1 和 writer3 不相等的元素是從第 1 開始的,下標(biāo)為  0。

也可以通過 Comparator 來檢出不相等的元素:

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

程序輸出的結(jié)果如下所示:

-1 0

感謝各位的閱讀,以上就是“Java中怎么比較2個(gè)數(shù)組相等以及檢出不匹配項(xiàng)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Java中怎么比較2個(gè)數(shù)組相等以及檢出不匹配項(xiàng)這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI