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

 更新时间:2022年10月08日 08:34:43   作者:这名字好厉害O  
这篇文章主要介绍了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;
   }
  }
 }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java 中List删除实例详解

    java 中List删除实例详解

    这篇文章主要介绍了java 中List删除实例详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • sqlserver的jdbc配置方法

    sqlserver的jdbc配置方法

    这篇文章主要介绍了sqlserver的jdbc配置方法,需要的朋友可以参考下
    2014-04-04
  • spring MVC cors跨域实现源码解析

    spring MVC cors跨域实现源码解析

    本文主要介绍了spring MVC cors跨域实现源码解析。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 解决SpringBoot使用devtools导致的类型转换异常问题

    解决SpringBoot使用devtools导致的类型转换异常问题

    这篇文章主要介绍了解决SpringBoot使用devtools导致的类型转换异常问题,具有很好的参考价值,希望对大家有所帮助。 一起跟随小编过来看看吧
    2020-08-08
  • Mybatis ResultType如何处理返回类型

    Mybatis ResultType如何处理返回类型

    这篇文章主要介绍了Mybatis ResultType如何处理返回类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 浅谈对java中锁的理解

    浅谈对java中锁的理解

    本文主要讲述java中锁的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-03-03
  • Java8 stream流分组groupingBy的使用方法代码

    Java8 stream流分组groupingBy的使用方法代码

    对于java8的新特性groupingBy方法,相信有很多人都在工作中用过,这篇文章主要给大家介绍了关于Java8 stream流分组groupingBy的使用方法,需要的朋友可以参考下
    2024-01-01
  • maven 打包项目的几种方式

    maven 打包项目的几种方式

    maven目前在web上面的使用方式很普遍,而打包的方式也存在很多方式,本文就详细的介绍了三种方式,具有一定的参考价值,感兴趣的可以了解下
    2021-06-06
  • 详解在spring boot中配置多个DispatcherServlet

    详解在spring boot中配置多个DispatcherServlet

    本篇文章主要介绍了详解在spring boot中配置多个DispatcherServlet,具有一定的参考价值,有兴趣的可以了解一下。
    2017-03-03
  • Java 入门图形用户界面设计之复选框

    Java 入门图形用户界面设计之复选框

    图形界面(简称GUI)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受,本篇精讲Java语言中关于图形用户界面的复选框
    2022-02-02

最新评论