java中List集合去重常見的幾種方法總結(jié)
前言
在 Java 里,有多種方法可以對 List 集合進行去重操作,下面為你詳細(xì)介紹常見的幾種方法:
1. 使用LinkedHashSet去重
LinkedHashSet 是 Set 接口的一個實現(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 方法接收一個 List 集合作為參數(shù),先把這個 List 集合轉(zhuǎn)換為 LinkedHashSet,由于 LinkedHashSet 會自動去除重復(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. 手動遍歷去重
通過手動遍歷 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 方法:實現(xiàn)簡單,能保證元素的插入順序,時間復(fù)雜度為 O(n)O(n)O(n)。
- Stream API 方法:代碼簡潔,可讀性高,適合處理復(fù)雜的流操作,但在性能上可能略遜于
LinkedHashSet方法。 - 手動遍歷方法:實現(xiàn)簡單,但時間復(fù)雜度為 O(n2)O(n^2)O(n2),在處理大規(guī)模數(shù)據(jù)時性能較差。
總結(jié)
到此這篇關(guān)于java中List集合去重常見的幾種方法的文章就介紹到這了,更多相關(guān)java List集合去重內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot(cloud)自動裝配bean找不到類型的問題
這篇文章主要介紹了SpringBoot(cloud)自動裝配bean找不到類型的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
Spring Cloud 部署時使用 Kubernetes 作為注冊中心和配置中
Spring Cloud Kubernetes提供了使用Kubernete本地服務(wù)的Spring Cloud通用接口實現(xiàn),這篇文章主要介紹了Spring Cloud 部署時如何使用 Kubernetes 作為注冊中心和配置中心,需要的朋友可以參考下2024-05-05
Spring Cloud中使用Feign,@RequestBody無法繼承的解決方案
這篇文章主要介紹了Spring Cloud中使用Feign,@RequestBody無法繼承的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
Java多線程中的CountDownLatch詳細(xì)解讀
這篇文章主要介紹了Java多線程中的CountDownLatch詳細(xì)解讀,一個同步輔助類,在完成一組正在其他線程中執(zhí)行的操作之前,它允許一個或多個線程一直等待,用給定的計數(shù) 初始化 CountDownLatch,需要的朋友可以參考下2023-11-11
SpringBoot請求映射的五種優(yōu)化方式小結(jié)
在Spring?Boot應(yīng)用開發(fā)中,請求映射(Request?Mapping)是將HTTP請求路由到相應(yīng)控制器方法的核心機制,合理優(yōu)化請求映射不僅可以提升應(yīng)用性能,還能改善代碼結(jié)構(gòu),增強API的可維護性和可擴展性,本文將介紹5種Spring?Boot請求映射優(yōu)化方式,需要的朋友可以參考下2025-06-06
使用springboot aop來實現(xiàn)讀寫分離和事物配置
這篇文章主要介紹了使用springboot aop來實現(xiàn)讀寫分離和事物配置,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04

