java避免多层嵌套循环用到的一些小技巧分享
避免多层嵌套循环用到的小技巧
在JAVA开发中,我们经常遇到一些写二重循环甚至更多循环的情况,但是,这种循环会造成很多资源浪费。
因为X次循环下套用Y次循环,相当于总共执行了X * Y次运算,因此,我们应尽量避免多重嵌套的情况。
例:
(1)借用第三个List,使用Contains()方法
情景:从ListA 中取出userId与ListB中的userId做对比,当其相等时,取出ListB中该条数据。
public List getDetail(List<AttendanceInfo > listA, List<CardInfo > listB) { List list= new ArrayList<>(); List listC = new ArrayList(); for(AttendanceInfo attendanceInfo: attendanceList){ listC.add(attendanceInfo.getUserId()); } for (CardInfo cardInfo: cardList){ if (! listC.contains(cardInfo.getUserId())){ list.add(cardInfo); } } return list; }
我们可以先创建一个空的ListC, 遍历 ListA取出userId添加到ListC中,之后,遍历ListB并通过contains()方法将符合数据添加到list当中。
(2)数据量大,使用HashSet
虽然 contains()方法可以进行判断,但是当数据量极大时,我们借用的第三个List就不要使用ArrayList了,最好使用HashSet,这跟他们的底层数据结构有关系。
举个直观的例子,循环的时候,同样是20W条数据,ArrayList的contains()方法跑了2分钟,HashSet的contains()方法跑了 1秒!!!!
(3)JAVA8及以上使用lambda表达式
Java8引进了lambda表达式和流模式,比如map.reduce,详情可百度学习下lambda写法。
跳出java中的多层嵌套循环
使用 break 标号语句跳出嵌套循环:
public static void main(String[] args) { javastack: for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { System.out.println("i="+i+"?j="+j); if (j == 3) { break javastack; } } } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring context:component-scan的使用及说明
这篇文章主要介绍了Spring context:component-scan的使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-09-09手撸一个Spring Boot Starter并上传到Maven中央仓库
本文主要介绍了手撸一个Spring Boot Starter并上传到Maven中央仓库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-05-05springcloud中RabbitMQ死信队列与延迟交换机实现方法
死信队列是消息队列中非常重要的概念,同时我们需要业务场景中都需要延迟发送的概念,比如12306中的30分钟后未支付订单取消,那么本期,我们就来讲解死信队列,以及如何通过延迟交换机来实现延迟发送的需求,感兴趣的朋友一起看看吧2022-05-05
最新评论