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-08
Springboot如何設(shè)置過濾器及重復(fù)讀取request里的body
這篇文章主要介紹了Springboot如何設(shè)置過濾器及重復(fù)讀取request里的body,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
IDEA 使用mybatis插件Free Mybatis plugin的步驟(推薦)
這篇文章主要介紹了IDEA 使用mybatis插件Free Mybatis plugin的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
Spring MVC的優(yōu)點(diǎn)與核心接口_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Spring MVC的優(yōu)點(diǎn)與核心接口,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08
JPA中@CreatedDate和@LastModifiedDate的使用方式
這篇文章主要介紹了JPA中@CreatedDate和@LastModifiedDate的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
springboot實(shí)現(xiàn)多實(shí)例crontab搶占定時(shí)任務(wù)(實(shí)例代碼)
這篇文章主要介紹了springboot實(shí)現(xiàn)多實(shí)例crontab搶占定時(shí)任務(wù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
java中將list用逗號(hào)隔開拼成字符串的4種方法例子
我們經(jīng)常在開發(fā)過程之中會(huì)遇到需要把返回的Id list轉(zhuǎn)換為一個(gè)使用逗號(hào)(,)分隔的字符串,下面這篇文章主要給大家介紹了關(guān)于java中將list用逗號(hào)隔開拼成字符串的4種方法例子,需要的朋友可以參考下2024-01-01
Java實(shí)現(xiàn)文件監(jiān)控器FileMonitor的實(shí)例代碼
這篇文章主要介紹了Java實(shí)現(xiàn)文件監(jiān)控器FileMonitor的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12

