欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現(xiàn)List去重的五種方法詳解

 更新時間:2022年10月26日 10:32:03   作者:共飲一杯無  
這篇文章主要為大家詳細介紹了Java中List去重的5種方法,文中的示例代碼講解詳細,具有一定的學習和參考價值,需要的小伙伴可以了解一下

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

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

但是,在實際的業(yè)務開發(fā)中遇到的情況會更復雜。

本文為大家總結了五個常用的List去重方式,希望有所幫助

通過HashSet去重(不保證順序)

    
    public static List<String> getUserList() {
        List<String> userList = new ArrayList<>();
        userList.add("小王");
        userList.add("小張");
        userList.add("小詹");
        userList.add("小王");
        userList.add("老王");
        userList.add("小詹");
        return userList;
    }

    /**
     * 通過HashSet去重(不保證順序)
     * 利用了Set的特性:元素不可重復,其底層原理是先計算每個對象的hash值,再比較元素值是否相同,如果相同,則保留最新的。
     */
    @Test
    public void removeRepeat1() {
        List<String> userList = getUserList();
        System.out.println("去重前:" + userList);
        Set<String> hashSet = new HashSet<>(userList);
        List newList = new ArrayList(hashSet);
        System.out.println("去重后:" + newList);
    }

通過HashSet去重(保證順序)

   /**
     * 通過HashSet去重(保證順序)
     */
    @Test
    public void removeRepeat2() {
        List<String> userList = getUserList();
        System.out.println("去重前:" + userList);
        Set set = new HashSet();
        List newList = new ArrayList();
        for (String str : userList) {
            if (set.add(str)) {
                newList.add(str);
            }
        }
        System.out.println("去重后:" + newList);
    }

遍歷后判斷賦給另一個list集合去重(保證順序)

   /**
     * 遍歷后判斷賦給另一個list集合去重(保證順序)
     */
    @Test
    public void removeRepeat3() {
        List<String> userList = getUserList();
        System.out.println("去重前:" + userList);
        List<String> newList = new ArrayList<String>();
        for (String str : userList) {
            if (!newList.contains(str)) {
                newList.add(str);
            }
        }
        System.out.println("去重后:" + newList);
    }

通過TreeSet去重(保證順序)

    /**
     * 通過TreeSet去重(保證順序)
     * TreeSet集合實際上是利用TreeMap的帶有一個比較器參數(shù)的構造方法實現(xiàn),看JDK源碼很清晰,最重要的是這個參數(shù)Comparator接口
     */
    @Test
    public void removeRepeat4() {
        List<String> userList = getUserList();
        System.out.println("去重前:" + userList);
        Set<String> treeSet = new TreeSet<>();
        treeSet.addAll(userList);
        List newList = new ArrayList(treeSet);
        System.out.println("去重后:" + newList);
    }

Java8中Stream流處理(保證順序)

    /**
     * Java8中Stream流處理(保證順序)
     * 首先獲得此list的Stream,然后調用distinct()方法。Java8中提供流的方式對數(shù)據(jù)進行處理,非常快,底層用的是forkJoin框架,
     * 提供了并行處理,使得多個處理器同時處理流中的數(shù)據(jù),所以耗時非常短。
     */
    @Test
    public void removeRepeat5() {
        List<String> userList = getUserList();
        System.out.println("去重前:" + userList);
        List newList = userList.stream().distinct().collect(Collectors.toList());
        System.out.println("去重后:" + newList);
    }

到此這篇關于Java實現(xiàn)List去重的五種方法詳解的文章就介紹到這了,更多相關Java List去重內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Schedule定時任務在分布式產(chǎn)生的問題詳解

    Schedule定時任務在分布式產(chǎn)生的問題詳解

    這篇文章主要介紹了Schedule定時任務在分布式產(chǎn)生的問題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Java死鎖代碼實例及產(chǎn)生死鎖必備的四個條件

    Java死鎖代碼實例及產(chǎn)生死鎖必備的四個條件

    這篇文章主要介紹了Java死鎖代碼實例及產(chǎn)生死鎖必備的四個條件,Java 發(fā)生死鎖的根本原因是,在申請鎖時發(fā)生了交叉閉環(huán)申請,synchronized在開發(fā)中最好不要嵌套使用,容易導致死鎖,需要的朋友可以參考下
    2024-01-01
  • 詳解Spring獲取配置的三種方式

    詳解Spring獲取配置的三種方式

    這篇文章主要為大家詳細介紹了Spring獲取配置的三種方式:@Value方式動態(tài)獲取單個配置、@ConfigurationProperties+前綴方式批量獲取配置以及Environment動態(tài)獲取單個配置,感興趣的可以了解一下
    2022-03-03
  • 聊聊關于Java方法重寫的反思

    聊聊關于Java方法重寫的反思

    最近在開發(fā)中遇到一個關于Java方法重寫的一些問題,對于方法重寫的用法以及可能導致的問題產(chǎn)生了一些思考,本文用于記錄下這些想法,希望對大家也有所幫助
    2023-05-05
  • jstl標簽基礎開發(fā)步驟(詳解)

    jstl標簽基礎開發(fā)步驟(詳解)

    下面小編就為大家?guī)硪黄猨stl標簽基礎開發(fā)步驟(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • java判斷字符串包含某個字符的實例方法

    java判斷字符串包含某個字符的實例方法

    在本篇文章里小編給大家整理的是一篇關于java判斷字符串包含某個字符的實例方法,有需要的朋友們學習下。
    2019-12-12
  • 一篇文章告訴你JAVA Mybatis框架的核心原理到底有多重要

    一篇文章告訴你JAVA Mybatis框架的核心原理到底有多重要

    yBatis的底層操作封裝了JDBC的API,MyBatis的工作原理以及核心流程與JDBC的使用步驟一脈相承,MyBatis的核心對象(SqlSession,Executor)與JDBC的核心對象(Connection,Statement)相互對應
    2021-06-06
  • java導出到excel常用的幾種方式總結

    java導出到excel常用的幾種方式總結

    導出excel是咱Java開發(fā)的必備技能啦,之前項目有這個功能,現(xiàn)在將其獨立出來,分享一下,下面這篇文章主要給大家介紹了關于java導出到excel常用的幾種方式,需要的朋友可以參考下
    2023-05-05
  • java語言中封裝類代碼示例

    java語言中封裝類代碼示例

    這篇文章主要介紹了java語言中封裝類,涉及相關代碼示例及結果分析,以及封裝的好處簡單介紹,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Spring Boot Event Bus用法小結

    Spring Boot Event Bus用法小結

    Spring Boot Event Bus是Spring框架中事件驅動編程的一部分,本文主要介紹了Spring Boot Event Bus用法小結,感興趣的可以了解一下
    2023-09-09

最新評論