<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java中5種List的去重方法及它們的效率對比,你用對了嗎?

          共 326字,需瀏覽 1分鐘

           ·

          2020-11-19 02:26

          來源:blog.csdn.net/qq3434569/article/details/100520524

          01、使用兩個(gè)for循環(huán)實(shí)現(xiàn)List去重(有序)

          ????/**使用兩個(gè)for循環(huán)實(shí)現(xiàn)List去重(有序)
          ?????*
          ?????*?@param?list
          ?????*?*/

          ????public?static?List?removeDuplicationBy2For(List?list)?{
          ????????for?(int?i=0;i????????{
          ????????????for?(int?j=i+1;j????????????{
          ????????????????if(list.get(i).equals(list.get(j))){
          ????????????????????list.remove(j);
          ????????????????}
          ????????????}
          ????????}
          ????????return?list;
          ????}

          02、使用List集合contains方法循環(huán)遍歷(有序)

          ????/**使用List集合contains方法循環(huán)遍歷(有序)
          ?????*
          ?????*?@param?list
          ?????*?*/

          ????public?static?List?removeDuplicationByContains(List?list)?{
          ????????List?newList?=new?ArrayList<>();
          ????????for?(int?i=0;i????????{
          ????????????boolean?isContains?=newList.contains(list.get(i));
          ????????????if(!isContains){
          ????????????????newList.add(list.get(i));
          ????????????}
          ????????}
          ????????list.clear();
          ????????list.addAll(newList);
          ????????return?list;
          ????}

          03、使用HashSet實(shí)現(xiàn)List去重(無序)

          ????/**使用HashSet實(shí)現(xiàn)List去重(無序)
          ?????*
          ?????*?@param?list
          ?????*?*/

          ????public?static?List?removeDuplicationByHashSet(List?list)?{
          ????????HashSet?set?=?new?HashSet(list);
          ????????//把List集合所有元素清空
          ????????list.clear();
          ????????//把HashSet對象添加至List集合
          ????????list.addAll(set);
          ????????return?list;
          ????}

          04、使用TreeSet實(shí)現(xiàn)List去重(有序)

          ????/**使用TreeSet實(shí)現(xiàn)List去重(有序)
          ?????*
          ?????*?@param?list
          ?????*?*/

          ????public?static?List?removeDuplicationByTreeSet(List?list)?{
          ????????TreeSet?set?=?new?TreeSet(list);
          ????????//把List集合所有元素清空
          ????????list.clear();
          ????????//把HashSet對象添加至List集合
          ????????list.addAll(set);
          ????????return?list;
          ????}

          05、使用java8新特性stream實(shí)現(xiàn)List去重(有序)

          ????/**使用java8新特性stream實(shí)現(xiàn)List去重(有序)
          ?????*
          ?????*?@param?list
          ?????*?*/

          ????public?static?List?removeDuplicationByStream(List?list)?{
          ????????List?newList?=?list.stream().distinct().collect(Collectors.toList());
          ????????return?newList;
          ????}

          效率測試代碼

          ????public?static?void?main(String?args[])?{
          ????????List?list1?=?new?ArrayList<>();
          ????????List?list2?=?new?ArrayList<>();
          ????????List?list3?=?new?ArrayList<>();
          ????????List?list4?=?new?ArrayList<>();
          ????????List?list5?=?new?ArrayList<>();
          ????????Random?random?=new?Random();
          ????????for?(int?i?=?0;?i?100000;?i++)?{
          ????????????int?value?=random.nextInt(500);
          ????????????list1.add(value);
          ????????????list2.add(value);
          ????????????list3.add(value);
          ????????????list4.add(value);
          ????????????list5.add(value);
          ????????}
          ????????long?startTime?;
          ????????long?endTime;
          ????????startTime?=?System.currentTimeMillis();
          ????????removeDuplicationByHashSet(list1);
          ????????endTime?=?System.currentTimeMillis();
          ????????System.out.println("使用HashSet實(shí)現(xiàn)List去重時(shí)間:"+(endTime-startTime)+"毫秒");
          ????????startTime?=?System.currentTimeMillis();
          ????????removeDuplicationByTreeSet(list2);
          ????????endTime?=?System.currentTimeMillis();
          ????????System.out.println("使用TreeSet實(shí)現(xiàn)List去重時(shí)間:"+(endTime-startTime)+"毫秒");
          ????????startTime?=?System.currentTimeMillis();
          ????????removeDuplicationByStream(list3);
          ????????endTime?=?System.currentTimeMillis();
          ????????System.out.println("使用java8新特性stream實(shí)現(xiàn)List去重:"+(endTime-startTime)+"毫秒");
          ????????startTime?=?System.currentTimeMillis();
          ????????removeDuplicationBy2For(list4);
          ????????endTime?=?System.currentTimeMillis();
          ????????System.out.println("使用兩個(gè)for循環(huán)實(shí)現(xiàn)List去重:"+(endTime-startTime)+"毫秒");
          ????????startTime?=?System.currentTimeMillis();
          ????????removeDuplicationByContains(list5);
          ????????endTime?=?System.currentTimeMillis();
          ????????System.out.println("使用List集合contains方法循環(huán)遍歷:"+(endTime-startTime)+"毫秒");
          ?
          ????}

          結(jié)果:

          • 使用HashSet實(shí)現(xiàn)List去重時(shí)間:40毫秒
          • 使用TreeSet實(shí)現(xiàn)List去重時(shí)間:36毫秒
          • 使用java8新特性stream實(shí)現(xiàn)List去重:78毫秒
          • 使用兩個(gè)for循環(huán)實(shí)現(xiàn)List去重:533毫秒
          • 使用List集合contains方法循環(huán)遍歷:40毫秒

          更多測試結(jié)果

          隨機(jī)數(shù)在100范圍內(nèi):

          • 使用HashSet實(shí)現(xiàn)List去重時(shí)間:32毫秒
          • 使用TreeSet實(shí)現(xiàn)List去重時(shí)間:40毫秒
          • 使用java8新特性stream實(shí)現(xiàn)List去重:128毫秒
          • 使用兩個(gè)for循環(huán)實(shí)現(xiàn)List去重:693毫秒
          • 使用List集合contains方法循環(huán)遍歷:30毫秒

          隨機(jī)數(shù)在1000范圍內(nèi):

          • 使用HashSet實(shí)現(xiàn)List去重時(shí)間:34毫秒
          • 使用TreeSet實(shí)現(xiàn)List去重時(shí)間:72毫秒
          • 使用java8新特性stream實(shí)現(xiàn)List去重:125毫秒
          • 使用兩個(gè)for循環(huán)實(shí)現(xiàn)List去重:1063毫秒
          • 使用List集合contains方法循環(huán)遍歷:85毫秒

          隨機(jī)數(shù)在10000范圍內(nèi):

          • 使用HashSet實(shí)現(xiàn)List去重時(shí)間:51毫秒
          • 使用TreeSet實(shí)現(xiàn)List去重時(shí)間:103毫秒
          • 使用java8新特性stream實(shí)現(xiàn)List去重:201毫秒
          • 使用兩個(gè)for循環(huán)實(shí)現(xiàn)List去重:5448毫秒
          • 使用List集合contains方法循環(huán)遍歷:791毫秒

          結(jié)論

          無序HashSet,有序TreeSet

          推薦閱讀

          這應(yīng)該是全網(wǎng)最全的Git分支開發(fā)規(guī)范手冊~

          圖片驗(yàn)證碼的需求分析、優(yōu)雅實(shí)現(xiàn)

          8種常見SQL錯(cuò)誤用法

          一個(gè)小小的簽到功能,到底用MySQL還是Redis?


          最后,推薦給大家一個(gè)有趣有料的公眾號(hào):寫代碼的渣渣鵬,7年老程序員教你寫bug,回復(fù)?面試或資源 送一你整套開發(fā)筆記 有驚喜哦


          瀏覽 47
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产一区久久久 | 秋霞成人无码 | 一二三乱伦 | 色先锋av天天操 少妇 后入 视频 少妇精品一区二区 | 99热在线免费 |