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

Java求兩集合的交集、并集、差集實例

 更新時間:2024年08月02日 11:15:43   作者:貓飯_ACE  
這篇文章主要介紹了Java求兩集合的交集、并集、差集實例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、內(nèi)置函數(shù)實現(xiàn)

  • removeAll方法:從list中刪除指定集合中包含的所有元素。
  • retainAll方法:從list中刪除指定集合中不包含的所有元素。
  • addAll方法:用來向Set集合添加另一個集合對象所包含的所有內(nèi)容。
public class CollectionTest {
 
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();
 
        list1.add("a");
        list1.add("b");
        list1.add("c");
 
        list2.add("b");
        list2.add("e");
        list2.add("d");
 
        //求交集
        list1.retainAll(list2);
        System.out.println(list1.toString()); // b
 
        //求并集
        list1.removeAll(list2);
        list1.addAll(list2);
        System.out.println(list1.toString());  // a c b e d
 
        //求差集(list1有而list2沒有)
        list1.removeAll(list2);   // a c
 
    }
}

二、for循環(huán)遍歷實現(xiàn) 求兩個集合的交集

利用集合的contains方法,來對比第二個集合中是否存在相同的元素的方法,同時將交集結(jié)果返回。時間復(fù)雜度是O(n)。 

contains方法:用于判斷l(xiāng)ist集合是否包含某個元素。

public List<Object> intersectionForList_1(List<Object> arr1, List<Object> arr2) {
    long startTime = System.currentTimeMillis();
    List<Object> result = new ArrayList<>();
    for (Object arr : arr1) {
        if (arr2.contains(arr)) {
            result.add(arr);
         }
    }
    long endTime = System.currentTimeMillis();
    log.info("intersectionForList_1:" + (endTime - startTime));
    return result;
}

三、使用Java 8 Stream API 求兩個集合的交集

首先把兩個集合轉(zhuǎn)換成Stream,然后使用filter()方法篩選出交集元素,最后把結(jié)果轉(zhuǎn)換成集合。 時間復(fù)雜度是O(n)。

.stream().filter()方法:來篩選出滿足條件的對象,最終返回的篩選過后的列表。

Collectors.toList()和Collectors.toSet()方法都是將map后的stream轉(zhuǎn)換為一個列表對象,toSet()會去重重復(fù)的對象

Set<Integer> set1 = new HashSet<>();
set1.add(1);
set1.add(2);
set1.add(3);
set1.add(4);

Set<Integer> set2 = new HashSet<>();
set2.add(3);
set2.add(4);
set2.add(5);
Set<Integer> intersection = set1.stream().filter(set2::contains).collect(Collectors.toSet());
System.out.println(intersection); // 輸出 [3, 4]

四、使用迭代器求兩個集合的交集

public List<Object> intersectionForList_2(List<Object> arr1, List<Object> arr2) {

      List<Object> resultList = new ArrayList<>();
 
      List<Object> maxList;
      List<Object> minList;
      if (arr1.size()>arr2.size()){
          maxList = arr1;
          minList = arr2;
      }else {
          maxList = arr2;
          minList = arr1;
      }
 
      Iterator<Object> iterator = maxList.iterator();
      while (iterator.hasNext()){
          Object next = iterator.next();
          if (minList.contains(next)){
              resultList.add(next);
          }
      }
 

      return resultList;
  }

五、使用map 求兩個集合的交集

首先將list集合中的元素依次存入一個map中去,然后再以map的get方法來判斷是否存在這樣的元素。

這種方法的效率最高,在10萬條數(shù)據(jù)的測試下,這種方法耗時僅僅在十幾毫秒,而其他方法在將近一百多毫秒。

在百萬條數(shù)據(jù)進(jìn)行對比處理的時候,使用map特性的方法時間消耗大概在40毫秒左右,但是其他方法要將近10秒鐘,

所以在對于大量數(shù)據(jù)的處理過程中,還是非常建議使用這種方法的。

public List<Object> intersectionForList_3(List<Object> arr1, List<Object> arr2) {

    List<Object> resultList = new ArrayList<>();
    Map<String,Object> map = new HashMap<>();
    arr1.forEach(a1->{
         map.put(a1+"",a1);
    });
 
    arr2.forEach(a2->{
        Object obj = map.get(a2 + "");
        if (obj!=null){
            resultList.add(obj);
        }
    });

    return resultList;
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot 多環(huán)境配置教程

    springboot 多環(huán)境配置教程

    這篇文章主要介紹了springboot 常用配置之多環(huán)境配置,需要的朋友可以參考下
    2018-04-04
  • Java數(shù)據(jù)脫敏的常用方式總結(jié)

    Java數(shù)據(jù)脫敏的常用方式總結(jié)

    大家好!今天我們要聊一聊數(shù)據(jù)脫敏,這個詞聽起來像特工電影里的高科技武器,其實它就是給敏感數(shù)據(jù)穿上“偽裝衣”,防止“壞人”偷 窺,Java 提供了多種數(shù)據(jù)脫敏方式,今天咱們來聊幾種經(jīng)典實用的“偽裝術(shù)”,感興趣的小伙伴跟著小編一起來看看吧
    2024-11-11
  • 關(guān)于idea中Java Web項目的訪問路徑問題

    關(guān)于idea中Java Web項目的訪問路徑問題

    這篇文章主要介紹了idea中Java Web項目的訪問路徑問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • java 使用foreach遍歷集合元素的實例

    java 使用foreach遍歷集合元素的實例

    這篇文章主要介紹了java 使用foreach遍歷集合元素的實例的相關(guān)資料,這里提供實例幫助大家理解如何使用foreach 進(jìn)行遍歷,希望能幫助到大家,
    2017-08-08
  • 深入解析Spring?Boot?的SPI機(jī)制詳情

    深入解析Spring?Boot?的SPI機(jī)制詳情

    這篇文章主要介紹了深入解析Spring?Boot的SPI機(jī)制詳情,SPI是JDK內(nèi)置的一種服務(wù)提供發(fā)現(xiàn)機(jī)制,可以用來啟用框架擴(kuò)展和替換組件,主要用于框架中開發(fā),更多相關(guān)介紹,感興趣的小伙伴可以參考一下下面文章內(nèi)容
    2022-08-08
  • Maven 依賴坐標(biāo)與BOM統(tǒng)一管理及核心原理解析

    Maven 依賴坐標(biāo)與BOM統(tǒng)一管理及核心原理解析

    Maven提供的dependencyManagement機(jī)制與BOM(Bill of Materials)模式,正是解決這類復(fù)雜場景的鑰匙,本文將深入解析Maven依賴管理體系的核心原理,揭示構(gòu)建穩(wěn)健依賴治理方案的實踐路徑,感興趣的朋友一起看看吧
    2025-04-04
  • 淺談MyBatis Example模式SQL注入風(fēng)險

    淺談MyBatis Example模式SQL注入風(fēng)險

    在使用MyBatis逆向工程生成的Example查詢模式時,很多開發(fā)者看到XML中存在${}占位符就會擔(dān)心SQL注入問題,本文就來介紹一下MyBatis Example模式SQL注入風(fēng)險,感興趣的可以了解一下
    2025-10-10
  • JavaSE的三大接口:Comparator,Comparable和Cloneable詳解

    JavaSE的三大接口:Comparator,Comparable和Cloneable詳解

    這篇文章主要介紹了詳解JavaSE中Comparator,Comparable和Cloneable接口的區(qū)別的相關(guān)資料,希望通過本文大家能徹底掌握這部分內(nèi)容,需要的朋友可以參考下
    2021-10-10
  • Spring+Mybatis動態(tài)切換數(shù)據(jù)源的方法

    Spring+Mybatis動態(tài)切換數(shù)據(jù)源的方法

    這篇文章主要為大家詳細(xì)介紹了Spring+Mybatis動態(tài)切換數(shù)據(jù)源的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java 十進(jìn)制轉(zhuǎn)二、八、十六進(jìn)制的字符串

    Java 十進(jìn)制轉(zhuǎn)二、八、十六進(jìn)制的字符串

    本文主要介紹了十進(jìn)制轉(zhuǎn)二進(jìn)制;十進(jìn)制轉(zhuǎn)八進(jìn)制;十進(jìn)制轉(zhuǎn)十六進(jìn)制的方法,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02

最新評論

惠州市| 瓮安县| 肃宁县| 成安县| 大冶市| 稷山县| 宣武区| 根河市| 巴彦淖尔市| 甘南县| 葫芦岛市| 河曲县| 资阳市| 乌拉特中旗| 朝阳县| 拉萨市| 额济纳旗| 灵石县| 五华县| 临夏县| 遂宁市| 青神县| 东莞市| 望都县| 安庆市| 永城市| 平江县| 鄂托克旗| 酉阳| 内江市| 温宿县| 临城县| 陈巴尔虎旗| 田林县| 伊通| 桦甸市| 循化| 遂平县| 大名县| 腾冲县| 南安市|