如何去除Java中List集合中的重復(fù)數(shù)據(jù)
1.循環(huán)list中的所有元素然后刪除重復(fù)
public class duplicatRemoval { public static List removeDuplicate(List list){ for(int i=0;i<list. size()-1;i++){ for(int j=list.size()-1;j>i;j--){ if(list. get(j). equals(list.get(i))){ list.remove(j); } } } return list; } }
總結(jié):
兩層循環(huán),外層循環(huán)從第一個(gè)元素向最后一個(gè)元素循環(huán),內(nèi)層循環(huán)是從最后一個(gè)元素向外層循環(huán)元素的當(dāng)前元素循環(huán)。比較兩個(gè)元素是否相等,如果相等,移除靠后的元素來進(jìn)行去重。這種方法時(shí)間復(fù)雜度大于O(n),小于O(N²)
2.通過HashSet剔除重復(fù)元素
public class duplicatRemoval { public static List removeDuplicate(List list) { HashSet hashSet = new HashSet(list) ; list.clear(); list.addAll(hashSet); return list; } }
總結(jié):
此種方式是利用了Set的特性:元素不可重復(fù),其底層原理是先計(jì)算每個(gè)對象的hash值,再比較元素值是否相同,如果相同,則保留最新的。
3.刪除ArrayList中重復(fù)元素,保持順序
public class duplicatRemoval { public static void removeDuplicateWithOrder(List list) { Set set = new HashSet( ); List newList = new ArrayList(); for (Iterator iter = list. iterator(); iter. hasNext();) { 0bject element= iter.next( ); if (set. add( element) ) newList.add( element); } list.clear(); list.addAll(newList); System. out. println(”remove duplicate"+ list); } }
4.把list里的對象遍歷一遍,用list.contain(),如果不存在就放入到另外一個(gè)list集合中
public class duplicatRemoval { public static List removeDuplicate(List list){ List listTemp = new ArrayList(); for(int i=0;i<list. size();i++){ if( !listTemp . contains(list.get(i))){ listTemp. add(list.get(i)); } return listTemp; }
5.用JDK1.8 Stream中對List進(jìn)行去重:list.stream().distinct();
public class duplicatRemoval { public static void main(String[] args) { List<Integer> list = new ArrayList<>( 1000000) ; for(inti=0;i<10;i++){ list. add(1); System . out. println(list); List shortList = removeDuplicate(list); System . out . println( shortList); } @Suppres sWarnings( "rawtypes" ) public static List removeDuplicate(List list){ List newList = (List) list. stream(). distinct( ).collect(Collectors. toList()); return newList ;
首先獲得此list的Stream,然后調(diào)用distinct()方法。Java8中提供流的方式對數(shù)據(jù)進(jìn)行處理,非常快,底層用的是forkJoin框架,提供了并行處理,使得多個(gè)處理器同時(shí)處理流中的數(shù)據(jù),所以耗時(shí)非常短。
到此這篇關(guān)于如何去除Java中List集合中的重復(fù)數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Java List集合內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA編譯時(shí)報(bào)常量字符串過長的解決辦法
本文主要介紹了IDEA編譯時(shí)報(bào)常量字符串過長的解決辦法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Java源碼難點(diǎn)突破Lambda表達(dá)式執(zhí)行原理
這篇文章主要為大家介紹了Java難點(diǎn)突破Lambda表達(dá)式執(zhí)行原理分析及示例的實(shí)現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03詳解Java七大阻塞隊(duì)列之SynchronousQueue
SynchronousQueue不需要存儲(chǔ)線程間交換的數(shù)據(jù),它的作用像是一個(gè)匹配器,使生產(chǎn)者和消費(fèi)者一一匹配。本文詳細(xì)講解了Java七大阻塞隊(duì)列之一SynchronousQueue,需要了解的小伙伴可以參考一下這篇文章2021-09-09基于Java實(shí)現(xiàn)抽獎(jiǎng)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于Java實(shí)現(xiàn)抽獎(jiǎng)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01