java百万数据集list.removeAll

java百万数据集list.removeAll

以下是未性能极差的代码👇(辣鸡代码)
在这里插入图片描述

以下是测试代码👇(优化代码)
在这里插入图片描述
以下是测试数据下
在这里插入图片描述
代码讲解
1.842行custmLabelVList(旧客户)数量有八十六多万条
2.849行custmIds(新客户)数量八十七万多条
3.851行使用旧客户剔除新客户取差集(剩下旧客户要删除)
4.851行取出旧客户数据需要用到十几分钟
5.856行使用新客户剔除旧客户去差集(剩下的需要新增)
6.856行取出新客户数据则要两个多小时
这就很tm离谱了
7.然后加了个工具类,以及优化了850行代码(list转hashset)

	/**
	 * @Description: list 剔除 指定值
	 * @param data 数据源
	 * @param beDelete 被剔除的数据
	 * @return 
	 * @author: zq
	 * @date: 2019年12月26日下午4:20:59
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static List removeAll(List data, List beDelete) {
		LinkedList linkedList = new LinkedList(data);
		HashSet hashSet = new HashSet(beDelete);
		Iterator it = linkedList.iterator();
		while(it.hasNext()){
			if(hashSet.contains(it.next())){
				it.remove();
			}
		}
		return linkedList;
	}

8.可以看到修改后的list操作时间和之前的完全不是一个概念。这就是巧用ArrayList和LinkedList的区别了
9.ArrayList是基于数组实现的,循环遍历、读取效率高,插入和删除效率低,因为每次插入和删除都需要移动数组下标
10.LinkedList是由双链,删除不需要移动数组元素,只需要修改链表节点指针
11.使用Iterator迭代器,只用对iterator进行循环,然后删除的元素,无需关注下标的问题,遍历效率高

总结
可以看到优化后的代码和优化前的执行时间完全不是一个档次,集合是个坎大家一定要了解


2020-2-25
更快的办法用java8 lambda表达式更快。。。。

List list=  new ArrayList();
list.stream().forEach(x -> {
	System.out.println(x);
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值