java中List去除重復(fù)數(shù)據(jù)的5種方式總結(jié)
前言
List 是一個接口,它繼承于Collection的接口。它代表著有序的隊列。當我們討論List的時候,一般都和Set作比較。
List中元素可以重復(fù),并且是有序的(這里的有序指的是按照放入的順序進行存儲。如按照順序把1,2,3存入List,那么,從List中遍歷出來的順序也是1,2,3)。
Set中的元素不可以重復(fù),并且是無序的(從set中遍歷出來的數(shù)據(jù)和放入順序沒有關(guān)系)。
以下介紹五種-不同的方法去除 Java 中ArrayList中的重復(fù)數(shù)據(jù)
1.使用LinkedHashSet刪除arraylist中的重復(fù)數(shù)據(jù)
LinkedHashSet是在一個ArrayList刪除重復(fù)數(shù)據(jù)的最佳方法。LinkedHashSet在內(nèi)部完成兩件事:
- 刪除重復(fù)數(shù)據(jù)
- 保持添加到其中的數(shù)據(jù)的順序
Java示例使用LinkedHashSet刪除arraylist中的重復(fù)項。在給定的示例中,numbersList是包含整數(shù)的arraylist,其中一些是重復(fù)的數(shù)字,例如1,3和5.我們將列表添加到LinkedHashSet,然后將內(nèi)容返回到列表中。結(jié)果arraylist沒有重復(fù)的整數(shù)。
public static void main(String[] args) { int List[] =[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8] LinkedHashSet<Integer> hashSet = new LinkedHashSet<>(List); ArrayList<Integer> listWithoutDuplicates = new ArrayList<>(hashSet); System.out.println(listWithoutDuplicates); }
輸出結(jié)果
[1, 2, 3, 4, 5, 6, 7, 8]
2.使用java8新特性stream進行List去重
要從arraylist中刪除重復(fù)項,我們也可以使用java 8 stream api。使用steam的distinct()方法返回一個由不同數(shù)據(jù)組成的流,通過對象的equals()方法進行比較。
收集所有區(qū)域數(shù)據(jù)List使用Collectors.toList() 。
Java程序,用于在不使用Set的情況下從java中的arraylist中刪除重復(fù)項。
public static void main(String[] args){ int List[] =[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8] List<Integer> listWithoutDuplicates = List.stream().distinct().collect(Collectors.toList()); System.out.println(listWithoutDuplicates); }
輸出結(jié)果
[1, 2, 3, 4, 5, 6, 7, 8]
3.利用HashSet不能添加重復(fù)數(shù)據(jù)的特性 由于HashSet不能保證添加順序,所以只能作為判斷條件保證順序:
private static void removeDuplicate(List<String> list) { HashSet<String> set = new HashSet<String>(list.size()); List<String> result = new ArrayList<String>(list.size()); for (String str : list) { if (set.add(str)) { result.add(str); } } list.clear(); list.addAll(result); }
4.利用List的contains方法循環(huán)遍歷,重新排序,只添加一次數(shù)據(jù),避免重復(fù):
private static void removeDuplicate(List<String> list) { List<String> result = new ArrayList<String>(list.size()); for (String str : list) { if (!result.contains(str)) { result.add(str); } } list.clear(); list.addAll(result); }
5.雙重for循環(huán)去重
public static void main(String[] args) { int List[] = [1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8] for (int i = 0; i < List.size(); i++) { for (int j = i + 1; j < List.size(); j++) { if (List.get(i) == List.get(j)) { List.remove(j); j--; } } } }
總結(jié)
到此這篇關(guān)于java中List去除重復(fù)數(shù)據(jù)的5種方式的文章就介紹到這了,更多相關(guān)java List去除重復(fù)數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaEE7+Websockets+GlassFish4打造聊天室
Java EE 7已經(jīng)發(fā)布很久了,新增加了很多新的功能和特性,如新增或更新了不少的JSR標準。其中特別受到關(guān)注的是Websockets。它的一個好處之一是減少了不必要的網(wǎng)絡(luò)流量。它主要是用于在客戶機和服務(wù)器之間建立單一的雙向連接。2015-09-09Java針對ArrayList自定義排序的2種實現(xiàn)方法
這篇文章主要介紹了Java針對ArrayList自定義排序的2種實現(xiàn)方法,結(jié)合實例形式總結(jié)分析了Java操作ArrayList自定義排序的原理與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2018-01-01SpringBoot整合阿里云OSS對象存儲服務(wù)的實現(xiàn)
這篇文章主要介紹了SpringBoot整合阿里云OSS對象存儲服務(wù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Spring boot2X Consul如何使用Feign實現(xiàn)服務(wù)調(diào)用
這篇文章主要介紹了spring boot2X Consul如何使用Feign實現(xiàn)服務(wù)調(diào)用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12MyBatis批量添加數(shù)據(jù)2種實現(xiàn)方法
這篇文章主要介紹了MyBatis批量添加數(shù)據(jù)2種實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06關(guān)于SpringCloud整合RabbitMQ的實例
這篇文章主要介紹了關(guān)于SpringCloud整合RabbitMQ的實例,消息隊列是指利用高效可靠的消息傳遞機制進行與平臺無關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進行分布式系統(tǒng)的集成,是在消息的傳輸過程中保存消息的容器,需要的朋友可以參考下2023-07-07Spring Boot的Maven插件Spring Boot Maven plu
Spring Boot的Maven插件Spring Boot Maven plugin以Maven的方式提供Spring Boot支持,Spring Boot Maven plugin將Spring Boot應(yīng)用打包為可執(zhí)行的jar或war文件,然后以通常的方式運行Spring Boot應(yīng)用,本文介紹Spring Boot的Maven插件Spring Boot Maven plugin,一起看看吧2024-01-01