最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java比較集合是否相等的技巧分享

 更新時間:2025年06月25日 09:36:32   作者:竹子愛揍功夫熊貓  
集合使我們開發(fā)過程中非常用到的,要說最常用的,非List莫屬,那么當(dāng)我們想要比較兩個List是否相等的時候,應(yīng)該怎么處理呢?本文將介紹幾個小技巧來處理,需要的朋友可以參考下

一、集合相等的定義

說兩個東西是否相等,首先要弄清楚這里相等是什么意思,值相等,內(nèi)存地址相等還是別的什么相等。

1.1 集合相等的基本概念

  • 集合大小相同
  • 集合中的元素相同
  • 元素的順序(對于有序集合)和重復(fù)性(對于允許重復(fù)的集合)是否一致

1.2 不同集合類型的相等性特點

  • List:有序,允許重復(fù)
  • Set:無序,不允許重復(fù)
  • Map:鍵值對存儲,鍵唯一

二、Java中比較集合相等的快速方法

Java本身是提供了相等比較的方法的,這里來看看都有哪些。

2.1 使用equals()方法

equals()方法在集合類中的實現(xiàn)原理是都有自己的特點的,我們下面綜合實際案例一起看看:

  • 對于List,比較元素順序和內(nèi)容
import java.util.ArrayList;
import java.util.List;

public class ArrayListComparison {

    public static void main(String[] args) {
        // 創(chuàng)建第一個ArrayList
        List<String> list1 = new ArrayList<>();
        list1.add("Apple");
        list1.add("Banana");
        list1.add("Cherry");

        // 創(chuàng)建第二個ArrayList
        List<String> list2 = new ArrayList<>();
        list2.add("Apple");
        list2.add("Banana");
        list2.add("Cherry");

        // 創(chuàng)建第三個ArrayList(用于測試不相等的情況)
        List<String> list3 = new ArrayList<>();
        list3.add("Apple");
        list3.add("Cherry");
        list3.add("Banana");

        // 比較list1和list2是否相等
        boolean isEqual1 = list1.equals(list2);
        System.out.println("list1和list2是否相等: " + isEqual1);

        // 比較list1和list3是否相等
        boolean isEqual2 = list1.equals(list3);
        System.out.println("list1和list3是否相等: " + isEqual2);
    }
    
}

在這里插入圖片描述

上面的執(zhí)行結(jié)果可以很明顯的看出,即使元素內(nèi)容一樣,順序不一樣,他們的結(jié)果也是不同的。

  • 對于Set,比較元素內(nèi)容,忽略順序
import java.util.HashSet;
import java.util.Set;

public class HashSetComparison {
    public static void main(String[] args) {
        // 創(chuàng)建兩個HashSet對象
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> set2 = new HashSet<>();
        Set<Integer> set3 = new HashSet<>();

        // 添加元素到set1
        set1.add(1);
        set1.add(2);
        set1.add(3);

        // 添加元素到set2,順序不同
        set2.add(3);
        set2.add(1);
        set2.add(2);

        // 添加元素到set3,順序不同
        set3.add(3);
        set3.add(1);
        set3.add(2);
        set3.add(4);

        // 輸出結(jié)果
        System.out.println("set1和set2是否相等: " + set1.equals(set2));
        System.out.println("set2和set3是否相等: " + set2.equals(set3));
    }

}

在這里插入圖片描述

上面執(zhí)行的結(jié)果不難看出,set集合,只在乎元素是否相同,不在乎里面的順序。

  • 對于Map,比較鍵值對
import java.util.HashMap;
import java.util.Map;

public class HashMapComparison {
    public static void main(String[] args) {
        // 創(chuàng)建兩個HashMap對象
        Map<String, Integer> map1 = new HashMap<>();
        Map<String, Integer> map2 = new HashMap<>();
        Map<String, Integer> map3 = new HashMap<>();

        // 添加鍵值對到map1
        map1.put("apple", 1);
        map1.put("banana", 2);
        map1.put("cherry", 3);

        // 添加鍵值對到map2,順序不同
        map2.put("apple", 1);
        map2.put("cherry", 3);
        map2.put("banana", 2);

        // 添加鍵值對到map3,值不同
        map3.put("banana", 3);
        map3.put("apple", 3);
        map3.put("cherry", 3);

        // 輸出結(jié)果
        System.out.println("map1和map2是否相等: " + map1.equals(map2));
        System.out.println("map2和map3是否相等: " + map3.equals(map2));
    }

}

在這里插入圖片描述

從上面的執(zhí)行結(jié)果可以看出,Map比較的是鍵值對是否一致,也是和順序無關(guān)的。

值得注意的是,Map本身建議使用entrySet()方法再進行equals方法。

在這里插入圖片描述

三、值得推薦的寫法和三方庫

實際有很多第三方庫都實現(xiàn)了集合的比較,例如Apache Commons Collections(這個有的版本List比較是不區(qū)分順序的,實際操作要注意)、Google Guava、和Hutool。

使用這些三方庫可以有效的提高代碼的可讀性,并且使用起來都比較簡潔,傳說有的三方庫還有一些性能提升(這個我沒驗證過)。

3.1 推薦使用庫 Hutool

Hutool是一個國產(chǎn)的Java工具包,提供了豐富的集合操作功能,同時還包含文件操作、加密解密、日志等其他實用工具。它簡化了集合的比較和操作,例如合并、交集、差集等。

  • 依賴引入
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.11</version>
</dependency>
  • 示例代碼
import cn.hutool.core.collection.CollUtil;

import java.util.ArrayList;
import java.util.List;

public class HutoolExample {

    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();
        list1.add("Apple");
        list1.add("Banana");
        list1.add("Cherry");

        List<String> list2 = new ArrayList<>();
        list2.add("Apple");
        list2.add("Banana");
        list2.add("Cherry");

        // 比較兩個集合是否相等
        boolean isEqual = CollUtil.equals(list1, list2);
        System.out.println("list1和list2是否相等: " + isEqual); // 輸出 true
    }
    
}

3.2 不用三方庫的推薦寫法 Objects.equals

java.util.Objects.equals 是 Java 標(biāo)準(zhǔn)庫中的一個實用工具方法,用于比較兩個對象是否相等。它在 Java 7 中引入,旨在簡化對象比較的代碼,同時避免空指針異常(NullPointerException)。這個方法非常實用,尤其是在處理可能為 null 的對象時。

  • 使用案例:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;

public class ObjectsComparison {

    public static void main(String[] args) {
        ArrayList<String> list1 = new ArrayList<>(Arrays.asList("Apple", "Banana", "Cherry"));
        ArrayList<String> list2 = new ArrayList<>(Arrays.asList("Apple", "Banana", "Cherry"));
        ArrayList<String> list3 = new ArrayList<>(Arrays.asList("Apple", "Cherry", "Banana"));

        boolean isEqual1 = Objects.equals(list1, list2);
        boolean isEqual2 = Objects.equals(list1, list3);

        System.out.println("list1和list2是否相等: " + isEqual1); // true
        System.out.println("list1和list3是否相等: " + isEqual2); // false
    }

}
  • 執(zhí)行結(jié)果:

在這里插入圖片描述

3.2.1 實現(xiàn)原理

Objects.equals 的實現(xiàn)邏輯非常簡單,以下是它的源碼:

在這里插入圖片描述

  • 如果兩個對象引用相同(a == b),直接返回 true
  • 如果第一個對象不為 null,調(diào)用 a.equals(b) 方法進行比較。
  • 如果兩個對象都為 null,返回 true

四、總結(jié)

不管是什么職級的開發(fā)工程師,在Java開發(fā)中,你都會使用到集合,集合比較是否相等是一個比較常見的方法,要弄清楚這個集合比較的基本規(guī)則,你才能更好的去實現(xiàn)需求。

以上就是Java比較集合是否相等的技巧分享的詳細(xì)內(nèi)容,更多關(guān)于Java比較集合相等的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java 格式化輸出JSON字符串的2種實現(xiàn)操作

    Java 格式化輸出JSON字符串的2種實現(xiàn)操作

    這篇文章主要介紹了Java 格式化輸出JSON字符串的2種實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • spring無法引入注解及import org.springframework.web.bind.annotation.*報錯的解決

    spring無法引入注解及import org.springframework.web.bind.annota

    本文主要介紹了spring無法引入注解及import org.springframework.web.bind.annotation.*報錯的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • java數(shù)據(jù)庫開發(fā)之JDBC的完整封裝兼容多種數(shù)據(jù)庫

    java數(shù)據(jù)庫開發(fā)之JDBC的完整封裝兼容多種數(shù)據(jù)庫

    這篇文章主要介紹了java數(shù)據(jù)庫開發(fā)之JDBC的完整封裝兼容多種數(shù)據(jù)庫,需要的朋友可以參考下
    2020-02-02
  • 實現(xiàn)Java刪除一個集合的多個元素

    實現(xiàn)Java刪除一個集合的多個元素

    Java中的For each實際上使用的是iterator進行處理的。而iterator是不允許集合在iterator使用期間刪除的。而我在for each時,從集合中刪除了一個元素,這導(dǎo)致了iterator拋出了ConcurrentModificationException,下面來看看到底怎么回事。
    2016-08-08
  • SimpleDateFormat在多線程下的安全問題及解決

    SimpleDateFormat在多線程下的安全問題及解決

    SimpleDateFormat類在Java中用于日期時間的格式化和解析,但在高并發(fā)環(huán)境下存在線程不安全的問題,原因是它共享了一個Calendar對象,導(dǎo)致多個線程操作時出現(xiàn)沖突,為了解決這個問題,可以使用局部變量、加鎖或使用線程安全的DateTimeFormatter類
    2026-03-03
  • Java多線程Thread基礎(chǔ)學(xué)習(xí)

    Java多線程Thread基礎(chǔ)學(xué)習(xí)

    每一個正在執(zhí)行的程序都是一個進程,資源只有一塊,所以在同一時間段會有多個程序同時執(zhí)行,但是在一個時間點上,只能由一個程序執(zhí)行,多線程是在一個進程的基礎(chǔ)之上的進一步劃分,需要的朋友可以參考下
    2023-04-04
  • Java的覆寫操作實例分析

    Java的覆寫操作實例分析

    這篇文章主要介紹了Java的覆寫操作,結(jié)合實例形式分析了java屬性覆寫及super調(diào)用父類方法覆寫相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • 詳解Java多態(tài)對象的類型轉(zhuǎn)換與動態(tài)綁定

    詳解Java多態(tài)對象的類型轉(zhuǎn)換與動態(tài)綁定

    這篇文章主要介紹了詳解Java多態(tài)對象的類型轉(zhuǎn)換與動態(tài)綁定,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • jvm運行原理以及類加載器實例詳解

    jvm運行原理以及類加載器實例詳解

    這篇文章主要給大家介紹了關(guān)于jvm運行原理以及類加載器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 使用feign調(diào)用接口時調(diào)不到get方法的問題及解決

    使用feign調(diào)用接口時調(diào)不到get方法的問題及解決

    這篇文章主要介紹了使用feign調(diào)用接口時調(diào)不到get方法的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評論

集安市| 城固县| 城口县| 丰县| 迭部县| 商都县| 武清区| 东光县| 蓬莱市| 乌拉特后旗| 漯河市| 光山县| 界首市| 海城市| 濮阳县| 永泰县| 仪征市| 睢宁县| 宾阳县| 建湖县| 栾川县| 翁源县| 武川县| 灌阳县| 仁怀市| 台中县| 包头市| 岳阳市| 博罗县| 嵊泗县| 西丰县| 静宁县| 上杭县| 山丹县| 九龙城区| 荃湾区| 海伦市| 盘锦市| 丹东市| 长沙市| 岳普湖县|