JAVA避免多层嵌套循环用到的一些小技巧

    技术2022-07-10  178

    在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写法。

    本文持续更新,想到哪写到哪,欢迎大家告诉我更多思路,万分感谢!!!

    Processed: 0.017, SQL: 9