您好,登錄后才能下訂單哦!
這篇文章主要講解了“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個數組相等以及檢出不匹配項這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。