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

Java求兩集合中元素交集的四種方法對(duì)比分析

 更新時(shí)間:2023年05月29日 14:45:43   作者:java技術(shù)媛  
這篇文章主要介紹了Java求兩集合中元素交集的四種方法對(duì)比總結(jié),四種求集合中元素交集的方法,按照在處理大量數(shù)據(jù)的效率來(lái)看,使用map集合的特性的方法效率最高,之后是使用Java流的方法,其次是使用for循環(huán)和迭代器的方法,需要的朋友可以參考下

最近在做項(xiàng)目的時(shí)候有用到對(duì)兩個(gè)集合中的元素進(jìn)行對(duì)比求其交集的情況,因?yàn)樯婕暗降臄?shù)據(jù)量比較大,所以在進(jìn)行求兩個(gè)集合中元素交集的時(shí)候,就應(yīng)該考慮到程序運(yùn)行的時(shí)間消耗等問(wèn)題,

所以寫(xiě)了四種求集合元素交集的方法 今天這篇文章主要是來(lái)記錄對(duì)比一下,這四種方法使用起來(lái)的效率問(wèn)題,

方法一,求兩個(gè)集合的交集【普通for循環(huán)】

這種方法是最普通的進(jìn)行for循環(huán)比較的方法。利用集合的contains方法,來(lái)對(duì)比第二個(gè)集合中是否存在相同的元素的方法,同時(shí)將交集結(jié)果返回。

代碼示例如下:

/**
    * 方法1,求兩個(gè)集合的交集
    *
    * @param arr1
    * @param arr2
    * @return
    */
   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;
   }

方法二,求兩個(gè)集合交集,(迭代器)

這種方法使用的是list集合的迭代器的方法,其實(shí)原理和for是一樣的,方法的核心也和for循環(huán)是一樣的,只是外層循環(huán)的方法不一樣,所以它和上面第一種方法的效果是一樣的。

代碼示例如下:

 
  /**
   * 方法2,求兩個(gè)集合交集,(迭代器)
   *
   * @param arr1
   * @param arr2
   * @return
   */
  public List<Object> intersectionForList_2(List<Object> arr1, List<Object> arr2) {
      long startTime = System.currentTimeMillis();
      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);
          }
      }
      long endTime = System.currentTimeMillis();
      log.info("intersectionForList_2:" + (endTime - startTime));
      return resultList;
  }

方法三,求兩個(gè)集合交集,(map)

這種方法使用的是map的特性,首先將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ò)程中,還是非常建議使用這種方法的。

代碼示例如下:

    /**
     * 方法3,求兩個(gè)集合交集,(map)
     *
     * @param arr1
     * @param arr2
     * @return
     */
    public List<Object> intersectionForList_3(List<Object> arr1, List<Object> arr2) {
        long startTime = System.currentTimeMillis();
        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);
            }
        });
        long endTime = System.currentTimeMillis();
        log.info("intersectionForList_3:" + (endTime-startTime));
        return resultList;
    }

方法四,求兩個(gè)集合交集,(forEasy)

這種方法使用的是集合的foreasy特性和Java流的特性,使用這種方法可以遍歷其中的一個(gè)集合,然后再使用contains方法來(lái)判斷另一個(gè)集合中是否存在該集合元素,這種方法的使用效率要優(yōu)于第一種和第二種方法。

代碼示例如下:

    /**
     * 方法4,求兩個(gè)集合交集,(forEasy)
     * @param arr1
     * @param arr2
     * @return
     */
    public List<Object> intersectionForList_4(List<Object> arr1, List<Object> arr2){
        long startTime = System.currentTimeMillis();
        List<Object> resultList = new ArrayList<>();
        arr1.stream().forEach(a1->{
            if (arr2.contains(a1)){
                resultList.add(a1);
            }
        });
        long endTime = System.currentTimeMillis();
        log.info("intersectionForList_4:" + (endTime-startTime));
        return resultList;
    }

方法總結(jié)

總結(jié)一下以上四種求集合中元素交集的方法,按照在處理大量數(shù)據(jù)的效率來(lái)看,使用map集合的特性的方法效率最高,之后是使用Java流的方法,其次是使用for循環(huán)和迭代器的方法,所以在正常情況下,還是推薦使用map的特性來(lái)進(jìn)行集合中元素的對(duì)比分析和求交集的。

到此這篇關(guān)于Java求兩集合中元素交集的四種方法對(duì)比總結(jié)的文章就介紹到這了,更多相關(guān)java求兩集合中元素交集內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring boot 實(shí)現(xiàn)阿里云視頻點(diǎn)播功能(刪除視頻)

    spring boot 實(shí)現(xiàn)阿里云視頻點(diǎn)播功能(刪除視頻)

    這篇文章主要介紹了spring boot 實(shí)現(xiàn)阿里云視頻點(diǎn)播(刪除視頻功能),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • idea項(xiàng)目的左側(cè)目錄沒(méi)了如何設(shè)置

    idea項(xiàng)目的左側(cè)目錄沒(méi)了如何設(shè)置

    這篇文章主要介紹了idea項(xiàng)目的左側(cè)目錄沒(méi)了如何設(shè)置的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • 使用Java快速將Web中表格轉(zhuǎn)換成Excel的方法

    使用Java快速將Web中表格轉(zhuǎn)換成Excel的方法

    在平時(shí)做系統(tǒng)項(xiàng)目時(shí),經(jīng)常會(huì)需要做導(dǎo)出功能,下面這篇文章主要給大家介紹了關(guān)于使用Java快速將Web中表格轉(zhuǎn)換成Excel的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • IDEA突然無(wú)法使用Git功能的問(wèn)題解決

    IDEA突然無(wú)法使用Git功能的問(wèn)題解決

    本文主要介紹了IDEA突然無(wú)法使用Git功能的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-08-08
  • Springboot 集成 SocketIO的示例代碼

    Springboot 集成 SocketIO的示例代碼

    Socket.IO是實(shí)現(xiàn)瀏覽器與服務(wù)器之間實(shí)時(shí)、雙向和基于事件的通信的工具庫(kù),本文主要介紹了Springboot 集成 SocketIO的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • JAVA解決在@autowired,@Resource注入為null的情況

    JAVA解決在@autowired,@Resource注入為null的情況

    這篇文章主要介紹了JAVA解決在@autowired,@Resource注入為null的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • Java構(gòu)造器(構(gòu)造方法)能否可以被重寫(xiě)

    Java構(gòu)造器(構(gòu)造方法)能否可以被重寫(xiě)

    這篇文章主要介紹了Java構(gòu)造器(構(gòu)造方法)能否可以被重寫(xiě)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • IDEA 通過(guò)腳本配置終端提示符樣式的方法

    IDEA 通過(guò)腳本配置終端提示符樣式的方法

    這篇文章給大家介紹IDEA通過(guò)腳本配置終端提示符樣式的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-08-08
  • java后臺(tái)實(shí)現(xiàn)支付寶支付接口和支付寶訂單查詢接口(前端為APP)

    java后臺(tái)實(shí)現(xiàn)支付寶支付接口和支付寶訂單查詢接口(前端為APP)

    這篇文章主要介紹了java后臺(tái)實(shí)現(xiàn)支付寶支付接口和支付寶訂單查詢接口(前端為APP),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-08-08
  • SpringBoot?mybatis-plus使用json字段實(shí)戰(zhàn)指南

    SpringBoot?mybatis-plus使用json字段實(shí)戰(zhàn)指南

    在現(xiàn)代應(yīng)用開(kāi)發(fā)中經(jīng)常會(huì)使用JSON格式存儲(chǔ)和傳輸數(shù)據(jù),為了便捷地處理數(shù)據(jù)庫(kù)中的JSON字段,MyBatis-Plus提供了強(qiáng)大的JSON處理器,這篇文章主要給大家介紹了關(guān)于SpringBoot?mybatis-plus使用json字段的相關(guān)資料,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

岳阳县| 张家口市| 雅江县| 邵阳县| 寻甸| 镇巴县| 乃东县| 鄂尔多斯市| 内丘县| 江孜县| 磐石市| 宝清县| 嵩明县| 得荣县| 磐安县| 东方市| 镶黄旗| 子洲县| 政和县| 泾源县| 建阳市| 城口县| 大同市| 留坝县| 都江堰市| 博白县| 溧阳市| 齐河县| 塔河县| 东莞市| 林芝县| 饶平县| 承德市| 泗水县| 靖安县| 格尔木市| 正蓝旗| 青田县| 鸡西市| 赤水市| 东乡县|