java较大数据量取差集如何是list.removeAll优化性能-创新互联

java 较大数据量取差集如何是list.removeAll优化性能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

新沂网站建设公司成都创新互联公司,新沂网站设计制作,有大型网站制作公司丰富经验。已为新沂1000多家提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的新沂做网站的公司定做!

List.removeAll效率低原因:

List.removeAll效率低和list集合本身的特点有关 :

List底层数据结构是数组,查询快,增删慢

1.List.contains()效率没有hashset高

arrayList.removeAll底层是for循化调用contains方法。arrayList虽然用get(index)方法查询效率高,但是若用contains方法查询对象元素,Set集合应该比List效率要高。

因为hashset的contains方法其实是先调用每个元素的hashCode()方法来返回哈希码,如果哈希码的值相等的情况下再调用equals(obj)方法去判断是否相等,只有在这两个方法所返回的值都相等的情况下,才判定这个HashSet包含某个元素,而list直接调用equals(obj)方法.所以hashset效率更高。

2.arrayList.remove()效率没有linkedList删除效率高

arrayList底层采用数组每删除一下元素数据后面的元素都要往前移动效率低消耗的资源也大,linkedList链表删除元素只要改变前后节点的位置信息

3.采用Iterator迭代器,这种方式我们仅需要对iterator进行循环,然后对需要删除的元素执行iterator.remove(iterator.next()),而无需关注下标的问题

改进代码

  LinkedList linkedList= new LinkedList(src);//大集合用linkedlist
	HashSet hashSet= new HashSet(oth);//小集合用hashset
	Iterator iter = linkedList.iterator();//采用Iterator迭代器进行数据的操作
	while(iter.hasNext()){
		if(hashSet.contains(iter.next())){
			iter.remove();			
			}	
		}

当前标题:java较大数据量取差集如何是list.removeAll优化性能-创新互联
地址分享:http://bzwzjz.com/article/dsecje.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 网站建设方案 重庆网站建设 宜宾网站设计 自适应网站建设 LED网站设计方案 成都网站制作 上市集团网站建设 企业网站建设 专业网站设计 定制级高端网站建设 定制网站制作 移动手机网站制作 网站建设 成都品牌网站设计 网站建设 成都网站建设 专业网站设计 重庆网站建设 成都网站设计制作公司 成都企业网站制作 企业网站建设 手机网站建设