如何用Java减少多层嵌套循环,有哪些实用技巧分享?

2026-05-25 21:411阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计601个文字,预计阅读时间需要3分钟。

如何用Java减少多层嵌套循环,有哪些实用技巧分享?

目录+避免多层嵌套循环用的小技巧+(1)使用第三个List,利用Contains()方法+(2)数据量大,使用HashSet+(3)JAVA8及以上使用lambda表达式+跳出Java中的多层嵌套循环+避免多层嵌套循环

目录
  • 避免多层嵌套循环用到的小技巧
    • (1)借用第三个List,使用Contains()方法
    • (2)数据量大,使用HashSet
    • (3)JAVA8及以上使用lambda表达式
  • 跳出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秒!!!!

    如何用Java减少多层嵌套循环,有哪些实用技巧分享?

    (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; } } } }

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

    标签:些小

    本文共计601个文字,预计阅读时间需要3分钟。

    如何用Java减少多层嵌套循环,有哪些实用技巧分享?

    目录+避免多层嵌套循环用的小技巧+(1)使用第三个List,利用Contains()方法+(2)数据量大,使用HashSet+(3)JAVA8及以上使用lambda表达式+跳出Java中的多层嵌套循环+避免多层嵌套循环

    目录
    • 避免多层嵌套循环用到的小技巧
      • (1)借用第三个List,使用Contains()方法
      • (2)数据量大,使用HashSet
      • (3)JAVA8及以上使用lambda表达式
    • 跳出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秒!!!!

      如何用Java减少多层嵌套循环,有哪些实用技巧分享?

      (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; } } } }

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

      标签:些小