别让for循环毁了你的程序(一)

前言

for循环是开发中常用的,但是使用for循环仍然有很多有需要注意的地方。今天我们就来细说for循环带了的坑。

  • for循环问题一,遍历list集合出现死循环。

今天,同事遇到了一个奇怪的问题,问题是这样的,他遍历向一个集合添加数据,结果发现for循环变成了死循环。大致代码如下。

//学生类
class Student{
 private String name;//性命
 private int age;//年龄
  
  //有参构造方法
  public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

  //无参构造方法
 public Student() {}

  public String getName() {
        return name;
  }

 public void setName(String name) {
     this.name = name;
  }

 public int getAge() {
    return age;
 }

 public void setAge(int age) {
    this.age = age;
 }
}

//测试程序
 public static void main(String[] args) {
 List<Student> students = new ArrayList<>();
 //添加几条测试数据
 students.add(new Student("张三",23));
 students.add(new Student("李四",24));
 students.add(new Student("王五",25));
 students.add(new Student("赵六",26));
 
    for(int i=0;i<students.size();i++){
       Student  student = students.get(i);
          if(i==2){
        student.setName("哈斯奇");       
       }
        students.add(student);
 }
}

好了,运行一下测试程序,你会发现程序变成了死循环,集合的size在不断增加,最终可能卡死你的终端。

  • 问题:
    造成死循环,studens.size()会一直增加

分析一下原因,这是为什么了。其实,出现这种问题,归根结底,就是基础不够扎实,或者做事太粗心,原因很简单。

  • 发生问题的原因

每次循环后,又添加了这个对象到数组中,增加了数组的长度,而且list里面是允许存储先通过对象的。进而导致了一list的增加,造成了死循环。其实添加对象属性就可以了,对象本身还在list里面的。

  • 解决办法:
    知道问题产生的原因,那就很好解决了,因为我们只是改变对象的属性值,而不是新增一个新的对象,因此,只需要做一下改变即可。
 public static void main(String[] args) {
 List<Student> students = new ArrayList<>();
 //添加测试数据
 students.add(new Student("张三",23));
 students.add(new Student("李四",24));
 students.add(new Student("王五",25));
 students.add(new Student("赵六",26));
 
    for(int i=0;i<students.size();i++){
       Student  student = students.get(i);
          if(i==2){
        student.setName("哈斯奇");     
       }
         // students.add(student);//去掉这句代码即可
 }
}

总结:

通过,这个简单的列子,我们需要实时吸取教训,凡事多总结。

  1. 平时一定要注意基本功,只有基本功扎实才会必秒因为基础不扎实出现本不该出现的问题。
  2. 不管做什么事情,一定要细心。
  3. 在使用list集合遍历并操作自身时,一定要注意位置是变化的,size 是移动的。

虽然很基础,希望大家遇到类似的问题不要范湖,一定注意要仔细,如果你觉得帮助了您,麻烦给个小红心吧,接下来我会继续讲解for循环,以及高效循环算法。

发布了49 篇原创文章 · 获赞 66 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/ljx1400052550/article/details/103911831