关于List的remove()方法

来源:互联网 发布:软件性能测试视频教程 编辑:程序博客网 时间:2024/06/05 18:18

今天有一个需求是需要将查询结果list进行遍历,找出其中isActived(是否有效字段)为无效的放在list的最后面。
大意之下写下以下错误代码:

for(int i=0;i<serviceList.size();i++){                String isActived = serviceList.get(i).getIsActived();                if("无效".equals(isActived)){                    Service s = serviceList.get(i);                    serviceList.remove(i);                    serviceList.add(s);                }            }

正确代码如下:

    List<Service> newList = new ArrayList<Service>();            for(int i=0;i<serviceList.size();i++){                String isActived = serviceList.get(i).getIsActived();                if("无效".equals(isActived)){                    Service s = serviceList.get(i);                    newList.add(s);                }            }            for(int i=0;i<newList.size();i++){                serviceList.remove(newList.get(i));            }            serviceList.addAll(newList);

总结:list在执行remove方法后会删除某个元素,然后之后的每一个元素都会向前移动一个下标,所以在循环中不能使用remove方法!

原创粉丝点击