1.循环list中的所有元素然后删除重复
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; } }
总结:
两层循环,外层循环从第一个元素向最后一个元素循环,内层循环是从最后一个元素向外层循环元素的当前元素循环。比较两个元素是否相等,如果相等,移除靠后的元素来进行去重。这种方法时间复杂度大于O(n),小于O(N²)
2.通过HashSet剔除重复元素
public class duplicatRemoval { public static List removeDuplicate(List list) { HashSet hashSet = new HashSet(list) ; list.clear(); list.addAll(hashSet); return list; } }
总结:
此种方式是利用了Set的特性:元素不可重复,其底层原理是先计算每个对象的hash值,再比较元素值是否相同,如果相同,则保留最新的。
3.删除ArrayList中重复元素,保持顺序
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进行去重: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,然后调用distinct()方法。Java8中提供流的方式对数据进行处理,非常快,底层用的是forkJoin框架,提供了并行处理,使得多个处理器同时处理流中的数据,所以耗时非常短。
到此这篇关于如何去除Java中List集合中的重复数据的文章就介绍到这了,更多相关Java List集合内容请搜索菜鸟教程(cainiaojc.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持菜鸟教程(cainiaojc.com)!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#cainiaojc.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。