集合删除数据后造成遍历不完全的解决方法

题干

有如下员工信息:

姓名:张三,工资:3000
姓名:李四,工资:3500
姓名:王五,工资:4000
姓名:赵六,工资:4500
姓名:田七,工资:5000

先需要将所有的员工信息都存入ArrayList集合中,并完成如下操作:

1、判断是否有姓名为“王五”的员工,如果有,改名为“王小五”

2、判断是否有姓名为“赵六”的员工,如果有,将其删除

3、给姓名为“田七”的员工,涨500工资

代码

javabean类

public class Worker {
    /*
    员工类
    姓名 工资
     */

    private String name;
    private int wedge;


    public Worker() {
    }

    public Worker(String name, int wedge) {
        this.name = name;
        this.wedge = wedge;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return wedge
     */
    public int getWedge() {
        return wedge;
    }

    /**
     * 设置
     * @param wedge
     */
    public void setWedge(int wedge) {
        this.wedge = wedge;
    }


}

测试类


import java.util.ArrayList;

public class Work3 {
    public static void main(String[] args) {
        /*
        有如下员工信息:
~~~java
姓名:张三,工资:3000
姓名:李四,工资:3500
姓名:王五,工资:4000
姓名:赵六,工资:4500
姓名:田七,工资:5000
~~~
先需要将所有的员工信息都存入ArrayList集合中,并完成如下操作:

1、判断是否有姓名为“王五”的员工,如果有,改名为“王小五”

2、判断是否有姓名为“赵六”的员工,如果有,将其删除

3、给姓名为“田七”的员工,涨500工资
         */

        ArrayList<Worker> list = new ArrayList<>();

        Worker w1 = new Worker("张三", 3000);
        Worker w2 = new Worker("李四", 3500);
        Worker w3 = new Worker("王五", 4000);
        Worker w4 = new Worker("赵六", 4500);
        Worker w5 = new Worker("田七", 5000);

        list.add(w1);
        list.add(w2);
        list.add(w3);
        list.add(w4);
        list.add(w5);

        for (int i = 0; i < list.size(); i++) {
            Worker wk = list.get(i);
            String wName = wk.getName();


            if (wName.equals("王五")) {
                wk.setName("王小五");
            }

            if (wName.equals("赵六")){
                list.remove(i);
                i--;
            }



            if (wName.equals("田七")) {
                Worker w = list.get(i);
                w.setWedge(w.getWedge() + 500);
            }


        }

//        for (int i = 0; i < list.size(); i++) {
//            Worker wk = list.get(i);
//            String wName = wk.getName();
//            if (wName.equals("赵六")) {
//                list.remove(i);
//            }
//
//        }

        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            Worker worker = list.get(i);
            System.out.println(worker.getName() + worker.getWedge());

        }
    }
}

存在问题

第一次编写完成后,无论怎么运行,

if (wName.equals("田七")) {
                Worker w = list.get(i);
                w.setWedge(w.getWedge() + 500);
            }

这段代码都不会运行到

原因是:遍历时如果删除元素,后面的元素会往前走,索引再加1就会有元素遗漏

解决办法

遍历时如果删除元素,后面的元素会往前走,索引再加1就会有元素遗漏,所以删除后遍历索引要相应的减1,防止有元素遍历不到。

if (wName.equals("赵六")){
                list.remove(i);
                i--;
            }

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值