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

Java求兩個 List集合的交集元素的多種實現(xiàn)方式

 更新時間:2025年05月21日 10:05:38   作者:冰糖心書房  
在 Java 中,求兩個 List 的交集元素可以通過多種方式實現(xiàn),常見的做法包括使用 retainAll 方法、Stream API 或手動遍歷,以下是這些方法的原理和實現(xiàn),需要的朋友可以參考下

1. 使用 retainAll 方法

retainAll 是 Collection 接口中的一個方法,用于保留集合中與指定集合相同的元素,移除其他元素。

原理:

  • retainAll 方法會遍歷當(dāng)前集合,并檢查每個元素是否存在于指定集合中。
  • 如果元素不存在于指定集合中,則從當(dāng)前集合中移除該元素。
  • 最終,當(dāng)前集合只保留與指定集合相同的元素。

retainAll 是 Java 中 List 接口提供的一個方法,用于保留列表中與指定集合中相同的元素,移除其他所有元素。換句話說,retainAll 方法會修改當(dāng)前列表,使其僅包含與指定集合中相同的元素。

方法定義

boolean retainAll(Collection<?> c);

參數(shù):

  • c:包含需要保留元素的集合。

返回值:

  • 如果列表因調(diào)用此方法而發(fā)生變化,則返回 true。
  • 如果列表未發(fā)生變化(即列表已經(jīng)只包含指定集合中的元素),則返回 false。

方法行為

  • 保留交集retainAll 方法會保留當(dāng)前列表與指定集合的交集。
  • 移除其他元素:當(dāng)前列表中不在指定集合中的元素會被移除。
  • 修改原列表retainAll 方法會直接修改當(dāng)前列表,而不是返回一個新的列表。

示例代碼

以下是一個簡單的示例,展示 retainAll 方法的使用:

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

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

        List<String> list2 = new ArrayList<>();
        list2.add("Banana");
        list2.add("Date");
        list2.add("Fig");

        // 調(diào)用 retainAll 方法
        boolean isChanged = list1.retainAll(list2);

        // 輸出結(jié)果
        System.out.println("List1 是否發(fā)生變化: " + isChanged); // true
        System.out.println("List1 的內(nèi)容: " + list1); // [Banana, Date]
        System.out.println("List2 的內(nèi)容: " + list2); // [Banana, Date, Fig]
    }
}

輸出:

List1 是否發(fā)生變化: true
List1 的內(nèi)容: [Banana, Date]
List2 的內(nèi)容: [Banana, Date, Fig]

關(guān)鍵點

  1. 修改原列表

    • retainAll 方法會直接修改調(diào)用它的列表,而不是返回一個新的列表。
    • 如果需要保留原列表,可以在調(diào)用 retainAll 之前創(chuàng)建一個副本。
  2. 返回值

    • 如果列表因調(diào)用 retainAll 而發(fā)生變化,則返回 true。
    • 如果列表未發(fā)生變化(即列表已經(jīng)只包含指定集合中的元素),則返回 false。
  3. 集合比較

    • retainAll 方法依賴于 equals 方法來比較元素是否相同。
    • 如果集合中包含自定義對象,請確保正確重寫了 equals 和 hashCode 方法。
  4. 空集合

    • 如果傳入的集合為空(null 或空集合),retainAll 會拋出 NullPointerException 或清空當(dāng)前列表。

注意事項

  1. 性能問題

    • retainAll 方法的時間復(fù)雜度取決于列表的實現(xiàn)。對于 ArrayList,時間復(fù)雜度為 O(n*m),其中 n 是列表的大小,m 是集合的大小。
    • 如果列表和集合都很大,性能可能會受到影響。
  2. 集合類型

    • retainAll 方法可以接受任何實現(xiàn)了 Collection 接口的對象作為參數(shù),例如 List、Set 等。
  3. 元素重復(fù)

    • 如果列表中有重復(fù)元素,而指定集合中沒有重復(fù)元素,retainAll 會保留列表中的重復(fù)元素。
    • 例如:
List<String> list1 = new ArrayList<>(List.of("A", "A", "B", "C"));
List<String> list2 = new ArrayList<>(List.of("A", "B"));
list1.retainAll(list2);
System.out.println(list1); // 輸出 [A, A, B]

注:

  • retainAll 方法用于保留列表中與指定集合中相同的元素,移除其他元素。
  • 它會直接修改原列表,并返回一個布爾值表示列表是否發(fā)生變化。
  • 使用時需要注意性能問題和集合類型的兼容性。
  • 如果需要保留原列表,可以在調(diào)用 retainAll 之前創(chuàng)建一個副本。

2. 使用 Stream API

Java 8 引入了 Stream API,可以方便地對集合進行操作。

原理:

  • 使用 stream() 方法將 List 轉(zhuǎn)換為流。
  • 使用 filter 方法過濾出存在于另一個集合中的元素。
  • 使用 collect 方法將結(jié)果收集到一個新的 List 中。

示例代碼:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();
        list1.add(1);
        list1.add(2);
        list1.add(3);

        List<Integer> list2 = new ArrayList<>();
        list2.add(2);
        list2.add(3);
        list2.add(4);

        List<Integer> intersection = list1.stream()
                .filter(list2::contains)
                .collect(Collectors.toList());

        System.out.println(intersection); // 輸出: [2, 3]
    }
}

3. 手動遍歷

手動遍歷兩個 List,并找出共同的元素。

原理:

  • 遍歷第一個 List 中的每個元素。
  • 檢查該元素是否存在于第二個 List 中。
  • 如果存在,則將其添加到結(jié)果集合中。

示例代碼:

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

public class Main {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();
        list1.add(1);
        list1.add(2);
        list1.add(3);

        List<Integer> list2 = new ArrayList<>();
        list2.add(2);
        list2.add(3);
        list2.add(4);

        List<Integer> intersection = new ArrayList<>();
        for (Integer item : list1) {
            if (list2.contains(item)) {
                intersection.add(item);
            }
        }

        System.out.println(intersection); // 輸出: [2, 3]
    }
}

總結(jié)

  • retainAll 方法是最直接的方式,但會修改原始集合。
  • Stream API 提供了更靈活和函數(shù)式的編程方式,且不會修改原始集合。
  • 手動遍歷適用于需要自定義邏輯的場景,但代碼量較多。

根據(jù)具體需求選擇合適的方法即可。

到此這篇關(guān)于Java求兩個 List集合的交集元素的多種實現(xiàn)方式的文章就介紹到這了,更多相關(guān)Java兩個 List集合交集元素內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java使用分布式實現(xiàn)數(shù)據(jù)庫讀寫分離的示例代碼

    Java使用分布式實現(xiàn)數(shù)據(jù)庫讀寫分離的示例代碼

    在MySQL中可以通過配置主從復(fù)制來實現(xiàn)數(shù)據(jù)同步,本文主要介紹了Java使用分布式實現(xiàn)數(shù)據(jù)庫讀寫分離,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • 23種設(shè)計模式(11)java策略模式

    23種設(shè)計模式(11)java策略模式

    這篇文章主要為大家詳細介紹了23種設(shè)計模式之java策略模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 詳解關(guān)于springboot-actuator監(jiān)控的401無權(quán)限訪問

    詳解關(guān)于springboot-actuator監(jiān)控的401無權(quán)限訪問

    本篇文章主要介紹了詳解關(guān)于springboot-actuator監(jiān)控的401無權(quán)限訪問,非常具有實用價值,有興趣的可以了解一下
    2017-09-09
  • Java中調(diào)用URL請求的5種常見方法詳解

    Java中調(diào)用URL請求的5種常見方法詳解

    這篇文章主要為大家詳細介紹了Java中調(diào)用URL請求的5種常見方法實現(xiàn),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2025-12-12
  • Java求解二叉樹的最近公共祖先實例代碼

    Java求解二叉樹的最近公共祖先實例代碼

    樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n(n>=0)個有限結(jié)點組成一個具有層次關(guān)系的集合,這篇文章主要給大家介紹了關(guān)于Java求解二叉樹的最近公共祖先的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • Spring-data-redis操作redis知識總結(jié)

    Spring-data-redis操作redis知識總結(jié)

    這篇文章主要介紹了Spring-data-redis操作redis知識總結(jié),spring-data-redis是spring-data模塊的一部分,專門用來支持在spring管理項目對redis的操作。
    2017-04-04
  • SpringMVC攔截器零基礎(chǔ)掌握

    SpringMVC攔截器零基礎(chǔ)掌握

    攔截器(Interceptor)是一種動態(tài)攔截方法調(diào)用的機制,在SpringMVC中動態(tài)攔截控制器方法的執(zhí)行。本文將詳細講講SpringMVC中攔截器的概念及入門案例,感興趣的可以嘗試一下
    2023-03-03
  • Java自帶注解、元注解、自定義注解的區(qū)別

    Java自帶注解、元注解、自定義注解的區(qū)別

    本文主要介紹了Java自帶注解、元注解、自定義注解的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 微服務(wù)領(lǐng)域Spring Boot自動伸縮的實現(xiàn)方法

    微服務(wù)領(lǐng)域Spring Boot自動伸縮的實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于微服務(wù)領(lǐng)域Spring Boot自動伸縮的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Flink實現(xiàn)特定統(tǒng)計的歸約聚合reduce操作

    Flink實現(xiàn)特定統(tǒng)計的歸約聚合reduce操作

    這篇文章主要介紹了Flink實現(xiàn)特定統(tǒng)計的歸約聚合reduce操作,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02

最新評論

卫辉市| 嵊泗县| 衡阳县| 仙游县| 武冈市| 冕宁县| 靖边县| 神木县| 云南省| 咸丰县| 彭州市| 介休市| 什邡市| 万荣县| 什邡市| 根河市| 孝感市| 开封市| 丽水市| 永善县| 鄂尔多斯市| 西畴县| 隆林| 阳西县| 夏邑县| 龙游县| 巧家县| 特克斯县| 沂南县| 尖扎县| 淄博市| 曲周县| 长阳| 泰安市| 商南县| 定结县| 山丹县| 田阳县| 玛曲县| 麻栗坡县| 蕲春县|