精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

List 去重的六種方法,這個方法完美!

開發 前端
在日常的業務開發中,偶爾會遇到需要將 List 集合中的重復數據去除掉的場景。這個時候可能有同學會問:為什么不直接使用 Set 或者 LinkedHashSet 呢?這樣不就沒有重復數據的問題了嘛?

[[438618]]

本文轉載自微信公眾號「Java中文社群」,作者磊哥 。轉載本文請聯系Java中文社群公眾號。

在日常的業務開發中,偶爾會遇到需要將 List 集合中的重復數據去除掉的場景。

這個時候可能有同學會問:為什么不直接使用 Set 或者 LinkedHashSet 呢?這樣不就沒有重復數據的問題了嘛?

不得不說,能提這個問題的同學很機智,一眼就看到了問題的本質。

但是,在實際的業務開發中遇到的情況會更復雜。比如,List 集合可能是歷史遺留問題,也有可能是調用接口返回的類型限制,只能使用 List 接收,又或者是代碼寫了一半,在做多個集合合并的時候才發現了這個問題,總之造成問題的原因有很多種,這里就不一一列舉了。

當發現這個問題之后,如果可以通過改造原有代碼,把原來的 List 類型替換成 Set 類型,那就可以直接修改集合的類型即可。但如果壓根就修改不了,或者是修改的成本太大,那接下來這 6 種去重的方法,將幫你將解決問題。

前置知識

正式開始之前,先來搞懂兩組概念:無序集合和有序集合 & 無序和有序。因為接下來的方法實現中,會反復提及這兩組概念,所以有必要在正式開始之前,先把它們搞清楚。

無序集合

無序集合是指,數據讀取的順序和數據插入的順序是不一致的。

例如,插入集合的順序是:1、5、3、7,而集合的讀取順序竟然是:1、3、5、7。

有序集合

有序集合的概念和無序集合的概念正好相反,它是指集合的讀取順序和插入順序是一致的。

例如,插入數據的順序是:1、5、3、7,那么讀取的順序也是:1、5、3、7。

有序和無序

通過上面的無序集合和有序集合,我們可以得出有序和無序的概念。有序指的是數據的排列順序和讀取順序符合我們的預期就叫做有序。而無序指的是數據的排列順序和讀取順序不符合我們的預期就叫做無序。

PS:如果對于有序和無序的概念不是很清楚也沒關系,通過下面的事例,我們可以進一步的理解它們的含義。

方法1:contains判斷去重(有序)

要進行數據去重,我們首先想到的是新建一個集合,然后循環原來的集合,每次循環判斷原集合中的循環項,如果當前循環的數據,沒有在新集合中存在就插入,已經存在了就舍棄,這樣當循環執行完,我們就得到了一個沒有重復元素的集合了,實現代碼如下:

  1. public class ListDistinctExample { 
  2.     public static void main(String[] args) { 
  3.         List<Integer> list = new ArrayList<Integer>() {{ 
  4.             add(1); 
  5.             add(3); 
  6.             add(5); 
  7.             add(2); 
  8.             add(1); 
  9.             add(3); 
  10.             add(7); 
  11.             add(2); 
  12.         }}; 
  13.         System.out.println("原集合:" + list); 
  14.         method(list); 
  15.     } 
  16.  
  17.     /** 
  18.      * 自定義去重 
  19.      * @param list 
  20.      */ 
  21.     public static void method(List<Integer> list) { 
  22.         // 新集合 
  23.         List<Integer> newList = new ArrayList<>(list.size()); 
  24.         list.forEach(i -> { 
  25.             if (!newList.contains(i)) { // 如果新集合中不存在則插入 
  26.                 newList.add(i); 
  27.             } 
  28.         }); 
  29.         System.out.println("去重集合:" + newList); 
  30.     } 

以上程序執行的結果,如下所示:

此方法的優點的:理解起來比較簡單,并且最終得到的集合也是有序的,這里的有序指的是新集合的排列順序和原集合的順序是一致的;但缺點是實現代碼有點多,不夠簡潔優雅。

方法2:迭代器去重(無序)

自定義 List 去重,除了上面的新建集合之外,我們也可以使用迭代器循環判斷每一項數據,如果當前循環的數據,在集合中存在兩份或兩份以上,就將當前的元素刪除掉,這樣循環完之后,也可以得到一個沒有重復數據的集合,實現代碼如下:

  1. public class ListDistinctExample { 
  2.     public static void main(String[] args) { 
  3.         List<Integer> list = new ArrayList<Integer>() {{ 
  4.             add(1); 
  5.             add(3); 
  6.             add(5); 
  7.             add(2); 
  8.             add(1); 
  9.             add(3); 
  10.             add(7); 
  11.             add(2); 
  12.         }}; 
  13.         System.out.println("原集合:" + list); 
  14.         method_1(list); 
  15.     } 
  16.  
  17.     /** 
  18.      * 使用迭代器去重 
  19.      * @param list 
  20.      */ 
  21.     public static void method_1(List<Integer> list) { 
  22.         Iterator<Integer> iterator = list.iterator(); 
  23.         while (iterator.hasNext()) { 
  24.             // 獲取循環的值 
  25.             Integer item = iterator.next(); 
  26.             // 如果存在兩個相同的值 
  27.             if (list.indexOf(item) != list.lastIndexOf(item)) { 
  28.                 // 移除最后那個相同的值 
  29.                 iterator.remove(); 
  30.             } 
  31.         } 
  32.         System.out.println("去重集合:" + list); 
  33.     } 

以上程序執行的結果,如下所示:

此方法的實現比上一種方法的實現代碼要少一些,并且不需要新建集合,但此方法得到的新集合是無序的,也就是新集合的排列順序和原集合不一致,因此也不是最優的解決方案。

方法3:HashSet去重(無序)

我們知道 HashSet 天生具備“去重”的特性,那我們只需要將 List 集合轉換成 HashSet 集合就可以了,實現代碼如下:

  1. public class ListDistinctExample { 
  2.     public static void main(String[] args) { 
  3.         List<Integer> list = new ArrayList<Integer>() {{ 
  4.             add(1); 
  5.             add(3); 
  6.             add(5); 
  7.             add(2); 
  8.             add(1); 
  9.             add(3); 
  10.             add(7); 
  11.             add(2); 
  12.         }}; 
  13.         System.out.println("原集合:" + list); 
  14.         method_2(list); 
  15.     } 
  16.  
  17.     /** 
  18.      * 使用 HashSet 去重 
  19.      * @param list 
  20.      */ 
  21.     public static void method_2(List<Integer> list) { 
  22.         HashSet<Integerset = new HashSet<>(list); 
  23.         System.out.println("去重集合:" + set); 
  24.     } 

以上程序執行的結果,如下所示:

此方法的實現代碼較為簡潔,但缺點是 HashSet 會自動排序,這樣新集合的數據排序就和原集合不一致了,如果對集合的順序有要求,那么此方法也不能滿足當前需求。

方法4:LinkedHashSet去重(有序)

既然 HashSet 會自動排序不能滿足需求,那就使用 LinkedHashSet,它既能去重又能保證集合的順序,實現代碼如下:

  1. public class ListDistinctExample { 
  2.     public static void main(String[] args) { 
  3.         List<Integer> list = new ArrayList<Integer>() {{ 
  4.             add(1); 
  5.             add(3); 
  6.             add(5); 
  7.             add(2); 
  8.             add(1); 
  9.             add(3); 
  10.             add(7); 
  11.             add(2); 
  12.         }}; 
  13.         System.out.println("原集合:" + list); 
  14.         method_3(list); 
  15.     } 
  16.  
  17.     /** 
  18.      * 使用 LinkedHashSet 去重 
  19.      * @param list 
  20.      */ 
  21.     public static void method_3(List<Integer> list) { 
  22.         LinkedHashSet<Integerset = new LinkedHashSet<>(list); 
  23.         System.out.println("去重集合:" + set); 
  24.     } 

以上程序執行的結果,如下所示:

從上述代碼和執行結果可以看出,LinkedHashSet 是到目前為止,實現比較簡單,且最終生成的新集合與原集合順序保持一致的實現方法,是我們可以考慮使用的一種去重方法。

方法5:TreeSet去重(無序)

除了以上的 Set 集合之外,我們還可以使用 TreeSet 集合來實現去重功能,實現代碼如下:

  1. public class ListDistinctExample { 
  2.     public static void main(String[] args) { 
  3.         List<Integer> list = new ArrayList<Integer>() {{ 
  4.             add(1); 
  5.             add(3); 
  6.             add(5); 
  7.             add(2); 
  8.             add(1); 
  9.             add(3); 
  10.             add(7); 
  11.             add(2); 
  12.         }}; 
  13.         System.out.println("原集合:" + list); 
  14.         method_4(list); 
  15.     } 
  16.  
  17.     /** 
  18.      * 使用 TreeSet 去重(無序) 
  19.      * @param list 
  20.      */ 
  21.     public static void method_4(List<Integer> list) { 
  22.         TreeSet<Integerset = new TreeSet<>(list); 
  23.         System.out.println("去重集合:" + set); 
  24.     } 

以上程序執行的結果,如下所示:

比較遺憾的是,TreeSet 雖然實現起來也比較簡單,但它有著和 HashSet 一樣的問題,會自動排序,因此也不能滿足我們的需求。

方法6:Stream去重(有序)

JDK 8 為我們帶來了一個非常實用的方法 Stream,使用它可以實現很多功能,比如下面的去重功能:

  1. public class ListDistinctExample { 
  2.     public static void main(String[] args) { 
  3.         List<Integer> list = new ArrayList<Integer>() {{ 
  4.             add(1); 
  5.             add(3); 
  6.             add(5); 
  7.             add(2); 
  8.             add(1); 
  9.             add(3); 
  10.             add(7); 
  11.             add(2); 
  12.         }}; 
  13.         System.out.println("原集合:" + list); 
  14.         method_5(list); 
  15.     } 
  16.  
  17.     /** 
  18.      * 使用 Stream 去重 
  19.      * @param list 
  20.      */ 
  21.     public static void method_5(List<Integer> list) { 
  22.         list = list.stream().distinct().collect(Collectors.toList()); 
  23.         System.out.println("去重集合:" + list); 
  24.     } 

以上程序執行的結果,如下所示:

Stream 實現去重功能和其他方法不同的是,它不用新創建集合,使用自身接收一個去重的結果就可以了,并且實現代碼也很簡潔,并且去重后的集合順序也和原集合的順序保持一致,是我們最優先考慮的去重方法。

總結

本文我們介紹了 6 種集合去重的方法,其中實現最簡潔,且去重之后的順序能和原集合保持一致的實現方法,只有兩種:LinkedHashSet 去重和 Stream 去重,而或一種去重方法無需借助新集合,是我們優先考慮的去重方法。

 

責任編輯:武曉燕 來源: Java中文社群
相關推薦

2011-02-24 10:56:34

人才

2010-10-08 11:13:22

MySQL修改密碼

2025-01-02 08:21:32

2023-09-06 08:00:00

ChatGPT數據分析

2023-04-03 20:29:00

Linux環境變量

2023-04-26 08:41:16

Git撤消更改

2022-06-09 08:46:58

ITCIO職業

2025-01-03 08:48:20

列表推導式Python編程

2025-07-14 03:00:00

2022-06-10 10:25:07

CIOIT領導者職業生涯

2015-07-09 10:13:05

IT基礎設施支出數據中心

2023-05-15 18:32:20

2023-12-08 08:53:37

數據中心人工智能自動化

2024-11-05 08:28:50

2022-02-21 22:47:36

首席信息官IT技術

2022-05-30 16:42:20

數據中心

2022-11-08 11:00:33

2022-11-29 10:33:15

Kubectl命令pod

2023-11-07 11:11:42

Go性能

2010-04-02 15:36:37

Oracle約束
點贊
收藏

51CTO技術棧公眾號

国产视频手机在线| 四虎永久免费在线| 日本不卡一二三| 国产精品天天摸av网| 成人免费福利在线| 欧美日韩精品亚洲精品| 精品网站aaa| 欧美三级午夜理伦三级中视频| 正在播放精油久久| 色一情一乱一乱一区91av| 天堂一区二区在线免费观看| 精品国偷自产在线| 亚洲av成人无码一二三在线观看| 欧美艳星kaydenkross| 一区二区三区四区av| 欧美日韩综合久久| 精品国产九九九| 日韩1区2区3区| 成人黄色大片在线观看| 欧美综合在线观看| 草视频在线观看| 精品久久精品| 亚洲精品美女网站| 婷婷激情小说网| 国产一区二区精品调教| 亚洲大片在线观看| 一区二区三区av在线| 你懂的在线看| 成人黄色网址在线观看| 91在线精品播放| 最近中文字幕av| 亚洲一区二区成人| 午夜精品视频网站| 特级片在线观看| 天天综合一区| 久久综合图片| 在线国产日韩| 国产一区二区三区在线观看网站 | 日韩欧美色电影| 中文字幕在线导航| 中文字幕在线视频久| 亚洲国产日产av| 妞干网在线播放| 黄色动漫在线观看| 欧美激情一区在线观看| 欧美色图亚洲自拍| 亚洲欧美综合在线观看| 成年人网站91| 国产一区二区三区av在线| www.97av| 成人午夜伦理影院| 国产精品美女久久久久av福利| 国产按摩一区二区三区| 久久精品国产99国产| 国产精品日韩在线观看| 天天综合久久综合| 日本女人一区二区三区| 国产精品成人在线| 亚洲精品一区二区二区| 日本不卡视频一二三区| 国产美女91呻吟求| 国产一区二区小视频| 久久精品国产免费| 亚洲精品日韩av| 国产a级免费视频| 成人精品gif动图一区| 国产精品美女xx| 日韩av资源| 日本一区二区三区久久久久久久久不| 欧美一区二区三区四区五区六区 | 亚洲视频久久久| 激情国产一区二区| 99久久久精品免费观看国产| 国模无码一区二区三区| 91在线观看污| 日韩欧美精品一区二区| 久久综合网导航| 亚洲综合久久av| 欧美成人xxxxx| 久久久精品一区二区毛片免费看| 欧美日韩国产高清一区| 久久黄色一级视频| 日韩av黄色在线| 亚洲人成绝费网站色www| 日韩av网站在线播放| 欧美激情四色| 日韩av免费在线播放| 在线视频 91| www..com久久爱| 日日骚一区二区网站| 超碰在线caoporen| 欧美日韩美女在线| 在线黄色免费观看| 91成人短视频| 国产一区二区三区在线观看视频| 欧美一区二区三区爽爽爽| 欧美88av| 国产精品久久久久高潮| 精品人妻伦一二三区久久| 91在线视频官网| 久久av喷吹av高潮av| 桃色av一区二区| 欧美精三区欧美精三区| 中文字幕免费在线播放| 99久久精品费精品国产风间由美| 久久久免费电影| 国产亚洲久一区二区| 国产高清不卡二三区| 日本一区二区精品视频| 青春草在线视频| 欧美少妇xxx| 精品视频站长推荐| 亚洲第一偷拍| 国产精品美女www| 香蕉视频网站在线| 一区二区三区日韩欧美精品| 中文字幕第21页| 美国成人xxx| 久久99精品国产99久久6尤物| 无码人妻av一区二区三区波多野| 国产精品456露脸| 亚洲三区在线| 日韩三区免费| 日韩精品在线观看网站| 精品无码人妻一区二区三区品| 免费在线成人网| 欧美精品成人一区二区在线观看 | 国产日本欧美视频| 三级无遮挡在线观看| 亚洲一区二区三区不卡国产欧美 | 久久精品偷拍视频| 久久亚洲精精品中文字幕早川悠里 | 337p日本欧洲亚洲大胆张筱雨| 日韩精品1区| 日韩美女免费视频| 少妇性bbb搡bbb爽爽爽欧美| 亚洲一二三级电影| 日本一本在线视频| 亚洲字幕久久| 91久久久久久久久久久| 老司机午夜在线| 欧美日本一道本| 男人天堂资源网| 日本欧美一区二区三区乱码| 色女人综合av| 日本综合视频| 在线精品视频视频中文字幕| 亚洲综合成人av| 国产日韩欧美不卡在线| 亚洲精品中文字幕无码蜜桃| 欧美一级一片| 欧美资源在线观看| 欧美成人片在线| 在线看日韩精品电影| 中文字幕网站在线观看| 亚洲欧美日本日韩| 欧美精品做受xxx性少妇| 在线观看日韩一区二区| 国产精品久久久久久户外露出| www.超碰com| 日韩中文字幕高清在线观看| 成人妇女免费播放久久久| 久久国产精品一区| 欧美xxxxx牲另类人与| 日韩精品一区二区在线播放| www久久精品| 牛夜精品久久久久久久| 天天综合亚洲| 国产综合 伊人色| 欧美日韩免费看片| 色综合亚洲精品激情狠狠| 国产模特av私拍大尺度| 亚洲一本大道在线| 中文字幕被公侵犯的漂亮人妻| 欧美aⅴ一区二区三区视频| 国产精品无码乱伦| 豆花视频一区二区| 国产91色在线| 国产午夜精品久久久久免费视| 日韩欧美久久一区| 日本中文在线播放| 欧美韩日一区二区三区四区| 日本成人xxx| 亚洲中字黄色| 在线观看视频黄色| 欧美爱爱网站| 成人春色激情网| segui88久久综合9999| 亚洲最大在线视频| 亚洲va欧美va| 欧美性大战久久久久久久 | 日韩在线看片| 国产高清在线精品一区二区三区| 浪潮色综合久久天堂| 欧美大胆a视频| 九一国产在线| 精品欧美乱码久久久久久1区2区| 日韩综合在线观看| 一二三区精品视频| 国产精品理论在线| 成人aaaa免费全部观看| 玖玖爱视频在线| 国产一区二区你懂的| 中文有码久久| 欧美猛男同性videos| 97神马电影| 欧美aaa级| 欧美专区在线观看| 男女在线视频| 精品国产依人香蕉在线精品| 暖暖视频在线免费观看| 精品少妇一区二区三区日产乱码 | 日韩av一卡二卡| 国产人妻精品一区二区三区| 欧美性生活大片免费观看网址| 中文字幕在线观看成人| 中文字幕不卡的av| 9.1成人看片免费版| 成人三级在线视频| www,av在线| 蜜桃视频免费观看一区| 农村妇女精品一二区| 亚洲国产高清视频| 国产免费xxx| 国产韩国精品一区二区三区| 日本婷婷久久久久久久久一区二区 | www久久日com| 日韩中文在线中文网三级| 精品亚洲成a人片在线观看| 亚洲国产欧美一区二区三区同亚洲| 国产一区二区视频免费观看| 欧美日韩国产经典色站一区二区三区 | 在线观看麻豆蜜桃| 亚洲欧美日韩精品久久亚洲区| 男人天堂av网| 精品欧美黑人一区二区三区| 国产成人a人亚洲精品无码| 欧美日本在线看| 一级爱爱免费视频| 精品视频在线免费看| 国产精品成人久久久| 在线观看欧美精品| 久久久久亚洲视频| 在线视频欧美精品| 国产一卡二卡三卡| 欧美伊人久久久久久久久影院 | 天堂资源在线中文精品| 少妇人妻互换不带套| 日韩中文字幕av电影| jizz欧美激情18| 人人超碰91尤物精品国产| 日本爱爱免费视频| 麻豆成人在线观看| 亚洲18在线看污www麻豆| 精品系列免费在线观看| 欧美性猛交xxxx乱大交91| 国产精品一区二区黑丝| 国产精品嫩草69影院| www.亚洲在线| 91精品国产自产| 国产亚洲精品久| 国产91在线播放九色| 亚洲欧美日韩国产综合在线| 青青草在线观看视频| 天天影视涩香欲综合网 | 国产福利在线免费观看| 91精品国产乱码久久久久久蜜臀| 涩涩涩在线视频| 国产精品成久久久久三级| 自拍偷拍亚洲| 国产精品一区二区三区在线| 久9久9色综合| 中文字幕在线中文字幕日亚韩一区| 欧美国产91| 国产网站免费在线观看| 日韩和欧美一区二区| 亚洲 国产 图片| 国产凹凸在线观看一区二区| 国产三级视频网站| 亚洲欧美一区二区在线观看| 久久久久久久久久综合| 91久久人澡人人添人人爽欧美| 97人妻精品一区二区三区软件| 亚洲成人av资源网| 番号集在线观看| 欧美第一黄色网| 欧美天堂视频| 成人xxxxx色| 国产调教一区二区三区| 特级西西444| 日本中文字幕一区| 韩国三级在线看| 国产精品欧美综合在线| 国产精品二区一区二区aⅴ| 91国产视频在线观看| 国产强被迫伦姧在线观看无码| 亚洲国产成人久久综合| 看女生喷水的网站在线观看| 日本欧美黄网站| 亚洲91网站| 婷婷五月色综合| 亚洲精品影视| 在线视频观看一区二区| 久久精品一级爱片| 久久久久亚洲av成人片| 欧美日韩一区三区| 天堂在线中文字幕| 久久精品91久久久久久再现| 竹内纱里奈兽皇系列在线观看| 91香蕉电影院| 日本女优一区| 国产日韩一区二区在线观看| 丰满白嫩尤物一区二区| 日韩av毛片在线观看| 欧美亚洲综合色| 日本福利片在线| 97精品国产91久久久久久| 国产一区二区三区视频在线| 午夜免费电影一区在线观看| 午夜一级久久| 国产伦精品一区三区精东| 亚洲欧美一区二区三区久本道91| 国内av在线播放| 亚洲欧美成人精品| 国产污视频在线播放| 97久久精品午夜一区二区| 久久精品国内一区二区三区水蜜桃 | 咪咪网在线视频| 懂色一区二区三区av片| 一精品久久久| 91pony九色| 国产精品福利电影一区二区三区四区| 午夜精品一区二| 亚洲欧洲高清在线| 女海盗2成人h版中文字幕| 国严精品久久久久久亚洲影视| 综合久久十次| 亚洲国产综合av| 亚洲免费三区一区二区| 国产内射老熟女aaaa∵| 久久综合国产精品台湾中文娱乐网| 美女网站视频一区| 日韩国产一区久久| 日韩专区一卡二卡| 最新日韩免费视频| 欧美日韩精品欧美日韩精品一 | 97在线观看视频| 欧美精品国产白浆久久久久| 日本午夜激情视频| 91在线一区二区| 欧美日韩a v| 中文字幕日韩精品在线观看| 国产亚洲欧美日韩精品一区二区三区 | 国产精品推荐精品| 一本一本久久| 免费看污片网站| 欧美日韩五月天| 91蜜桃在线视频| 国产久一道中文一区| 国产农村妇女毛片精品久久莱园子 | 欧美激情视频一区| 六月丁香久久丫| 狠狠操精品视频| 国产精品国产自产拍在线| av免费观看网址| 97超级碰在线看视频免费在线看 | 国产精品亚洲四区在线观看| www.一区二区.com| 99久久综合色| 中文字幕+乱码+中文字幕明步 | 欧美黄色免费在线观看| 亚洲电影天堂av| 欧美三区四区| 日韩视频一二三| 99国产精品国产精品久久| 波多野结衣一二区| 伦理中文字幕亚洲| 日韩有码一区| 免费av不卡在线| 亚洲18女电影在线观看| 成人高清免费观看mv| 91免费看蜜桃| 天堂成人国产精品一区| 永久久久久久久| 国产午夜精品麻豆| 国产精久久一区二区| 高清在线观看免费| 日韩一区中文字幕| 日韩毛片在线一区二区毛片| 91精品啪在线观看麻豆免费| 极品av少妇一区二区| 少妇精品无码一区二区免费视频 | 成人综合网网址| 久久精品盗摄| 久久r这里只有精品| 国产亚洲精品一区二区| 成人香蕉社区| 欧美丝袜在线观看| 欧美色播在线播放| 日韩av官网|