list去重的两种方法大比拼
有两个存储10000数据的list(LinkedList A和 LinkedList B)要去重,有两种方法:
方法一:
把两个list都放到一个HashSet里面,然后for循环转化回LinkedList。
方法二:
A.removeAll(B);
A.addAll(B);
上面两种方法,哪种效率更好呢?下面我们来让两种方法做一个大比拼:
public class ListRemovePKSet { public static void main(String[] args) { Long setCost=setFor(); Long listCost=listRemove(); if(setCost<listCost){ System.out.println("set大获全胜"); }else if(setCost<listCost){ System.out.println("list大获全胜"); }else{ System.out.println("set和list势均力敌"); } } public static Long setFor(){ List<Long> ids = new LinkedList<Long>(); List<Long> listIds1 = new LinkedList<Long>(); List<Long> listIds2 = new LinkedList<Long>(); Long num=1L; for(int i=0;i<10000;i++){ listIds1.add(num++); } listIds1.add(1000001L); num=1L; Long begin=System.currentTimeMillis(); Set<Long> set = new HashSet<Long>(); set.clear(); set.addAll( listIds1 ); set.addAll( listIds2 ); for (Long brandId : set) { ids.add(brandId); } Long cost=System.currentTimeMillis()-begin; System.out.println("set花费时间:"+cost); System.out.println("list长度:"+ids.size()); return cost; } public static Long listRemove(){ List<Long> listIds1 = new LinkedList<Long>(); List<Long> listIds2 = new LinkedList<Long>(); Long num=1L; for(int i=0;i<10000;i++){ listIds1.add(num++); } listIds1.add(1000001L); num=1L; for(int i=0;i<10000;i++){ listIds2.add(num++); } Long begin=System.currentTimeMillis(); listIds1.removeAll(listIds2); listIds1.addAll(listIds2); Long cost=System.currentTimeMillis()-begin; System.out.println("listRemove花费时间:"+cost); System.out.println("list长度:"+listIds1.size()); return cost; } }
结果:
set花费时间:5 list长度:10001 listRemove花费时间:298 list长度:10001 set大获全胜
由此可见,用set去重的效率高很多。
其实这是因为list.RemoveAll的原理是对链表进行遍历比较来去重的,所以效率不高。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了