Java實現(xiàn)List去重的五種方法詳解
在日常的業(yè)務(wù)開發(fā)中,偶爾會遇到需要將 List 集合中的重復(fù)數(shù)據(jù)去除掉的場景。這個時候可能有同學(xué)會問:為什么不直接使用 Set 或者 LinkedHashSet 呢?這樣不就沒有重復(fù)數(shù)據(jù)的問題了嘛?
不得不說,能提這個問題的同學(xué)很機(jī)智,一眼就看到了問題的本質(zhì)。
但是,在實際的業(yè)務(wù)開發(fā)中遇到的情況會更復(fù)雜。
本文為大家總結(jié)了五個常用的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的特性:元素不可重復(fù),其底層原理是先計算每個對象的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ù)的構(gòu)造方法實現(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,然后調(diào)用distinct()方法。Java8中提供流的方式對數(shù)據(jù)進(jìn)行處理,非??欤讓佑玫氖莊orkJoin框架,
* 提供了并行處理,使得多個處理器同時處理流中的數(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);
}到此這篇關(guān)于Java實現(xiàn)List去重的五種方法詳解的文章就介紹到這了,更多相關(guān)Java List去重內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis工具類JdbcTypeInterceptor運行時自動添加jdbcType屬性
今天小編就為大家分享一篇關(guān)于Mybatis工具類JdbcTypeInterceptor運行時自動添加jdbcType屬性,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
Java高級架構(gòu)之FastDFS分布式文件集群詳解
這篇文章主要介紹了Java高級架構(gòu)之FastDFS分布式文件集群詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04
詳解Spring ApplicationContext加載過程
這篇文章主要介紹了Spring ApplicationContext加載過程的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用spring框架,感興趣的朋友可以了解下2021-03-03
在這篇文章中給大家繼續(xù)講解包裝類的裝箱和拆箱問題。你可能會很好奇,做java開發(fā),怎么還裝起箱子來了?那么就請大家?guī)е苫笸驴窗?/div> 2023-04-04最新評論

