从品牌网站建设到网络营销策划,从策略到执行的一站式服务
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(); } }
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图