您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了Java中List集合中的重復(fù)數(shù)據(jù)怎么去除,內(nèi)容簡而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。
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)從第一個元素向最后一個元素循環(huán),內(nèi)層循環(huán)是從最后一個元素向外層循環(huán)元素的當(dāng)前元素循環(huán)。比較兩個元素是否相等,如果相等,移除靠后的元素來進(jìn)行去重。這種方法時間復(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ù),其底層原理是先計算每個對象的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(),如果不存在就放入到另外一個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框架,提供了并行處理,使得多個處理器同時處理流中的數(shù)據(jù),所以耗時非常短。
以上就是關(guān)于Java中List集合中的重復(fù)數(shù)據(jù)怎么去除的內(nèi)容,如果你們有學(xué)習(xí)到知識或者技能,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。