java中List集合去重常見的幾種方法總結(jié)
前言
在 Java 里,有多種方法可以對(duì) List
集合進(jìn)行去重操作,下面為你詳細(xì)介紹常見的幾種方法:
1. 使用LinkedHashSet去重
LinkedHashSet
是 Set
接口的一個(gè)實(shí)現(xiàn)類,它可以保證元素的插入順序,并且不允許有重復(fù)元素。
import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; public class ListDeduplication { public static <T> List<T> deduplicateUsingLinkedHashSet(List<T> list) { return new ArrayList<>(new LinkedHashSet<>(list)); } public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(2); list.add(3); list.add(4); list.add(4); List<Integer> deduplicatedList = deduplicateUsingLinkedHashSet(list); System.out.println(deduplicatedList); } }
在上述代碼中,deduplicateUsingLinkedHashSet
方法接收一個(gè) List
集合作為參數(shù),先把這個(gè) List
集合轉(zhuǎn)換為 LinkedHashSet
,由于 LinkedHashSet
會(huì)自動(dòng)去除重復(fù)元素,然后再將 LinkedHashSet
轉(zhuǎn)換回 List
集合。
2. 使用 Java 8 Stream API 去重
Java 8 引入的 Stream API 提供了 distinct()
方法,能夠去除流中的重復(fù)元素。
import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class ListDeduplicationWithStream { public static <T> List<T> deduplicateUsingStream(List<T> list) { return list.stream().distinct().collect(Collectors.toList()); } public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(2); list.add(3); list.add(4); list.add(4); List<Integer> deduplicatedList = deduplicateUsingStream(list); System.out.println(deduplicatedList); } }
deduplicateUsingStream
方法借助 stream()
方法將 List
集合轉(zhuǎn)換為流,接著使用 distinct()
方法去除重復(fù)元素,最后使用 collect(Collectors.toList())
方法將流轉(zhuǎn)換回 List
集合。
3. 手動(dòng)遍歷去重
通過手動(dòng)遍歷 List
集合,把不重復(fù)的元素添加到新的 List
集合中。
import java.util.ArrayList; import java.util.List; public class ManualListDeduplication { public static <T> List<T> deduplicateManually(List<T> list) { List<T> result = new ArrayList<>(); for (T item : list) { if (!result.contains(item)) { result.add(item); } } return result; } public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(2); list.add(3); list.add(4); list.add(4); List<Integer> deduplicatedList = deduplicateManually(list); System.out.println(deduplicatedList); } }
deduplicateManually
方法遍歷輸入的 List
集合,利用 contains()
方法檢查新的 List
集合中是否已經(jīng)存在該元素,如果不存在則添加到新的 List
集合中。
方法比較
- LinkedHashSet 方法:實(shí)現(xiàn)簡(jiǎn)單,能保證元素的插入順序,時(shí)間復(fù)雜度為 O(n)O(n)O(n)。
- Stream API 方法:代碼簡(jiǎn)潔,可讀性高,適合處理復(fù)雜的流操作,但在性能上可能略遜于
LinkedHashSet
方法。 - 手動(dòng)遍歷方法:實(shí)現(xiàn)簡(jiǎn)單,但時(shí)間復(fù)雜度為 O(n2)O(n^2)O(n2),在處理大規(guī)模數(shù)據(jù)時(shí)性能較差。
總結(jié)
到此這篇關(guān)于java中List集合去重常見的幾種方法的文章就介紹到這了,更多相關(guān)java List集合去重內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot啟動(dòng)不檢查JPA的數(shù)據(jù)源配置方式
這篇文章主要介紹了Springboot啟動(dòng)不檢查JPA的數(shù)據(jù)源配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Springboot如何設(shè)置過濾器及重復(fù)讀取request里的body
這篇文章主要介紹了Springboot如何設(shè)置過濾器及重復(fù)讀取request里的body,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03IDEA 使用mybatis插件Free Mybatis plugin的步驟(推薦)
這篇文章主要介紹了IDEA 使用mybatis插件Free Mybatis plugin的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12Spring MVC的優(yōu)點(diǎn)與核心接口_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Spring MVC的優(yōu)點(diǎn)與核心接口,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08JPA中@CreatedDate和@LastModifiedDate的使用方式
這篇文章主要介紹了JPA中@CreatedDate和@LastModifiedDate的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11springboot實(shí)現(xiàn)多實(shí)例crontab搶占定時(shí)任務(wù)(實(shí)例代碼)
這篇文章主要介紹了springboot實(shí)現(xiàn)多實(shí)例crontab搶占定時(shí)任務(wù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01java中將list用逗號(hào)隔開拼成字符串的4種方法例子
我們經(jīng)常在開發(fā)過程之中會(huì)遇到需要把返回的Id list轉(zhuǎn)換為一個(gè)使用逗號(hào)(,)分隔的字符串,下面這篇文章主要給大家介紹了關(guān)于java中將list用逗號(hào)隔開拼成字符串的4種方法例子,需要的朋友可以參考下2024-01-01Java實(shí)現(xiàn)文件監(jiān)控器FileMonitor的實(shí)例代碼
這篇文章主要介紹了Java實(shí)現(xiàn)文件監(jiān)控器FileMonitor的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12