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

Java求兩集合的交集、并集、差集實(shí)例

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

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

  • removeAll方法:從list中刪除指定集合中包含的所有元素。
  • retainAll方法:從list中刪除指定集合中不包含的所有元素。
  • addAll方法:用來(lái)向Set集合添加另一個(gè)集合對(duì)象所包含的所有內(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沒(méi)有)
        list1.removeAll(list2);   // a c
 
    }
}

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

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

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

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 求兩個(gè)集合的交集

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

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

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

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]

四、使用迭代器求兩個(gè)集合的交集

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 求兩個(gè)集合的交集

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

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

    關(guān)于idea中Java Web項(xiàng)目的訪問(wèn)路徑問(wèn)題

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

    java 使用foreach遍歷集合元素的實(shí)例

    這篇文章主要介紹了java 使用foreach遍歷集合元素的實(shí)例的相關(guān)資料,這里提供實(shí)例幫助大家理解如何使用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ī)制,可以用來(lái)啟用框架擴(kuò)展和替換組件,主要用于框架中開(kāi)發(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ù)雜場(chǎng)景的鑰匙,本文將深入解析Maven依賴管理體系的核心原理,揭示構(gòu)建穩(wěn)健依賴治理方案的實(shí)踐路徑,感興趣的朋友一起看看吧
    2025-04-04
  • 淺談MyBatis Example模式SQL注入風(fēng)險(xiǎn)

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

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

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

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

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

    這篇文章主要為大家詳細(xì)介紹了Spring+Mybatis動(dòng)態(tài)切換數(shù)據(jù)源的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    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)制的方法,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02

最新評(píng)論

陕西省| 武宁县| 南昌县| 锡林浩特市| 陵水| 济宁市| 五峰| 称多县| 五莲县| 全州县| 栾川县| 玛沁县| 多伦县| 邯郸市| 宁阳县| 黄山市| 杭州市| 白玉县| 屏东市| 高安市| 绥阳县| 邹平县| 阜南县| 七台河市| 横峰县| 泗水县| 合江县| 渝北区| 彭山县| 扎囊县| 南投市| 南华县| 哈巴河县| 华亭县| 岑巩县| 婺源县| 宜春市| 平泉县| 九龙县| 织金县| 崇州市|