iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >细数java for循环中的那些坑
  • 921
分享到

细数java for循环中的那些坑

2024-04-02 19:04:59 921人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录1、循环语句的几种语法2、循环中需要注意的点2.1 循环如果满足了查找的需求 break 直接跳出,不要浪费性能2.2 循环集合的时候能用for each 的尽量用for eac

1、循环语句的几种语法

语法:

for循环格式: for(初始化语句;条件判断;递进语句){ 循环体; } while循环格式:初始化语句; while(条件判断){ 循环体;递进语句; } do-while循环格式:初始化语句; do{ 循环体;递进语句; }while(条件判断);

实例:


package org.pdool.wrongfor;
import java.util.ArrayList;
import java.util.List;

public class FORMat {
   public static void main(String[] args) {
       List<Integer> numList = new ArrayList<>();
       numList.add(1);
       numList.add(2);
       // for 格式
       System.out.println("=======for 格式====");
       int size = numList.size();
       for (int i = 0; i < size; i++) {
           int num = numList.get(i);
           System.out.print(num);
      }
       System.out.println();
       // 增强for
       System.out.println("=======增强for 格式====");
       for (Integer num : numList) {
           System.out.print(num);
      }
       System.out.println();
       // while
       System.out.println("=======while 格式====");
       int i = 0;
       while (i < size){
           int num = numList.get(i);
           System.out.print(num);
           i++;
      }
       // do while
       System.out.println();
       System.out.println("=======do while 格式====");
       int j = 0;
       do{
           int num = numList.get(j);
           System.out.print(num);
           j++;
      }while (j < size);
  }
}

2、循环中需要注意的点

作为服务器开发,在开发中需要注意服务器的性能,毕竟客户端千千万,服务器只有一台,压榨服务器的性能是必须的,作为服务端的开发同学也要能省一点省一点,总结下循环的注意点。

2.1 循环如果满足了查找的需求 break 直接跳出,不要浪费性能


   public static void main(String[] args) {
       int size = 1000;
       for (int i = 1;i<size;i++){
           if ( i == 10){
               doSomeThing();
               // 此处应该直接break,尽快结束循环
          }
      }
  }

2.2 循环集合的时候能用for each 的尽量用for each


 for (Integer num : numList) {
           System.out.print(num);
      }

原因:不必要的操作索引,避免出错,代码清晰。

2.3 不要写空的死循环


public static void main(String[] args) {
       while (true){
           // doNothing()
      }
  }

原因:垃圾代码及早删除,存在安全隐患。

2.4 不要在循环中new对象


   public static void main(String[] args) {
       int size = 1000;
       for (int i = 1;i<size;i++){
           Date date = new Date();
      }
  }

原因:在循环内频繁的创建对象,大量对象内存的创建和回收都会增加系统负担。

2.5 可以在循环外做的,不要放到循环内


public static void main(String[] args) {
   int size = 1000;
   for (int i = 1;i<size;i++){
       int nowSec = getNowSec();
  }
}

原因:nowSec 明显可以在循环外计算并保存,放到循环内运算,浪费性能,也不好理解代码。在代码review的过程中经常看到类似的代码,这是在开发中不细心,或者copy过来的代码,无脑的放在循环中。

2.6 循环的建议

while 循环做好上限限制,做一个大的阈值计数,如果超过了直接报警

凡是次数确定的场景多用for循环;否则多用while循环。

3、循环中的坑

3.1 byte导致死循环


   public static void main(String[] args) {
       int size = 1000;
       for (byte i = 1;i<size;i++){
           System.out.println(i);
      }
  }

原因分析:byte 在执行的过程中会越界回到负数,所以造成死循环。一些新手在开发中,不注意,导致在之前的游戏有遇到这种情况,一定要注意!!

3.2 在循环中反向操作索引导致死循环


   public static void main(String[] args) {
       int size = 1000;
       for (int i = 1;i<size;i++){
           if ( 某种条件){
               i--;
          }
      }
  }

原因分析:反向操作索引导致回退,在开发中一定警觉这种情况,最好代码中不要出现这种操作。慎重

3.3 在操作集合的时候不要在循环里进行元素的 remove/add 操作


public static void main(String[] args) {
       List<Integer> list = new ArrayList();
       list.add(1);
       list.add(2);
       list.add(3);
       list.add(4);
       list.add(5);
       list.add(6);
       for (int i : list) {
           if(i == 4)list.add(99);
           System.out.println(i);
      }
  }

原因分析:对于集合的遍历,增强for循环其实内部是通过迭代器实现的,迭代的时候不允许修改,不然会抛出ConcurrentModificationException异常,

如果需要在集合中做删除,可以使用迭代器。


Iterator it=list.iterator();
       while(it.hasNext()){
           Object e=it.next();
           if("b".equals(e)){
               it.remove();
          }
      }

3.4 不要再循环内多次访问数据库,redis


public static void main(String[] args) {
       int size = 1000;
       for (int i = 1;i<size;i++){
           // 查询数据库
           // 查询redis
      }
  }

原因分析:多次查询数据库,会造成数据库压力过大,也会造成程序阻塞,可以使用批量查询。

4、总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: 细数java for循环中的那些坑

本文链接: https://www.lsjlt.com/news/130530.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 细数java for循环中的那些坑
    目录1、循环语句的几种语法2、循环中需要注意的点2.1 循环如果满足了查找的需求 break 直接跳出,不要浪费性能2.2 循环集合的时候能用for each 的尽量用for eac...
    99+
    2024-04-02
  • 详细总结Java for循环的那些坑
    目录一、循环语句的几种语法二、循环中需要注意的点三、循环中的坑四、总结一、循环语句的几种语法 语法: for循环格式: for(初始化语句;条件判断;递进语句){ 循环体; } ...
    99+
    2024-04-02
  • JAVA中简单的for循环异常踩坑
    目录引言踩坑操作foreach循环剔除方式下标循环操作正确方式迭代器方式Lambda表达式Stream流操作中间对象辅助方式引言 实际的业务项目开发中,大家应该对从给定的list中剔...
    99+
    2024-04-02
  • java中for循环的方式有哪些
    Java中for循环的方式有以下几种:1. 基本for循环:在已知循环次数的情况下使用,适用于遍历数组或集合等固定大小的数据结构。`...
    99+
    2023-10-07
    java
  • Golang中for循环遍历避坑指南
    目录一、for循环二、range语句三、实战一、for循环 循环:让程序多次执行相同的代码块 for循环是Go语言中唯一一个循环结构 for循环经典语法 先执行表达式1执行表达式2判...
    99+
    2023-05-20
    Golang for循环遍历 Golang for循环踩坑 Golang for循环
  • Python中的那些“坑”
    这里要看三组代码: # 第一组: >>>a=256 >>>b = 256 >>>a is b # 第二组: >>>a = 257 >>>b = ...
    99+
    2023-01-30
    Python
  • Java HashMap中除了死循环之外的那些问题
    目录1.死循环问题1.1 死循环执行流程一1.2 死循环执行流程二1.3 死循环执行流程三1.4 解决方案2.数据覆盖问题2.1 数据覆盖执行流程一2.2 数据覆盖执行流程二2.3 ...
    99+
    2024-04-02
  • JavaScript中的for循环与双重for循环详解
    for循环 for循环就是对数组的元素进行循环。 语法: for (初始化变量; 条件表达式; 迭代语句) {      需要执行的代码块...
    99+
    2024-04-02
  • Java和Python中for循环的比较
    Java是强类型的语言,而python是弱类型的语言。先看Java中的for循环使用,如下图: package test06; public class Fortest { public static void main(Str...
    99+
    2023-01-31
    Java Python
  • Python在for循环中获取循环次数的方法
    这篇文章主要介绍“Python在for循环中获取循环次数的方法”,在日常操作中,相信很多人在Python在for循环中获取循环次数的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python在for循环中...
    99+
    2023-06-02
  • python3中import的那么些坑
    多模块开发时注意事项 通过from 模块 import 变量,此时相当于给一个变量赋值 import time # 相当于在本文件中创建了一个名为time变量,这个变量指向python标准库中的time模块 from time ...
    99+
    2023-01-31
    import
  • 最详细的Java循环结构解析之for循环教程(适合小白)
    目录循环结构的分类 for循环 基本语法 for循环的执行顺序 实例解析 嵌套for循环 基本语法 实例解析 总结循环结构的分类 在Java中,循环结构一共分为三类: 1.for循...
    99+
    2024-04-02
  • for循环在Python中的工作原理详细
    例如: 作用于列表 >>> for elem in [1,2,3]: ... print(elem) ... 1 2 3 作用于字符串 >...
    99+
    2024-04-02
  • java中for循环的作用是什么
    在 Java 中,for 循环用于重复执行特定的代码块,其作用包括: 迭代数组或集合:通过 for 循环可以遍历数组、集合或其他可...
    99+
    2024-03-13
    java
  • 详解Java中的增强 for 循环 foreach
    foreach 是 Java 中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特定的字节码或特定的方式来对这些语法进行处理。能够提高性能,并减少代码出错的几率。在 Java 中还有比如 泛型、自动拆箱、自动...
    99+
    2023-05-31
    java 增强for循环 fo
  • PHP中For循环的用
    这篇文章主要介绍“PHP中For循环的用”,在日常操作中,相信很多人在PHP中For循环的用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP中For循环的用”的疑惑有所帮...
    99+
    2024-04-02
  • Shell中关于exit0的那些坑
    在 shell 编程中,需慎用 exit 0! 首先必须弄清楚 exit 0 不是 return 0, 区别在于 return 0 用于函数中,表示函数执行成功返回 0;而 exit...
    99+
    2024-04-02
  • Java Bean转Map的那些踩坑实战
    目录一、背景二、那些坑2.0 测试对象2.1 JSON 反序列化了类型丢失2.1.1 问题复现2.2.2 问题描述2.2 BeanMap 转换属性名错误2.2.1 commons-b...
    99+
    2024-04-02
  • 怎么使用Java的For循环
    这篇文章主要介绍“怎么使用Java的For循环”,在日常操作中,相信很多人在怎么使用Java的For循环问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java的For...
    99+
    2024-04-02
  • Java for循环和foreach循环的性能对比分析
    目录for循环和foreach循环的性能对比普通for循环语法foreach 循环语法for与foreach循环效率比较对于数组来说对于链表来说小结一下吧for循环和foreach循...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作