List remove造成循环结果异常

导读:本篇文章讲解 List remove造成循环结果异常,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

public static void main(String[] args) {
        String str1 = new String("abcde");
        String str2 = new String("abcde");
        String str3 = new String("abcde");
        String str4 = new String("abcde");
        String str5 = new String("abcde");
        List<String> list = new ArrayList<>();

        list.add(str1);
        list.add(str2);
        list.add(str3);
        list.add(str4);
        list.add(str5);

        System.out.println("list.size()=" + list.size());
        for (int i = 0; i < list.size(); i++) {
            if (((String) list.get(i)).startsWith("abcde")) {
                list.remove(i);
            }
        }
        System.out.println("after remove:list.size()=" + list.size());
    }

结果:

List remove造成循环结果异常

原因:

List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取

 解决方法:

1、倒过来遍历list

for (int i = list.size()-1; i > =0; i--) {
  if (((String) list.get(i)).startsWith("abcde")) {
   list.remove(i);
  }
}

2、每移除一个元素以后再把i移回来

for (int i = 0; i < list.size(); i++) {
  if (((String) list.get(i)).startsWith("abcde")) {
   list.remove(i);
   i=i-1;
  }
}

3、使用iterator.remove()方法删除

if (null != list && list.size() > 0) {
    Iterator it = list.iterator();  
    while(it.hasNext()){
        Student stu = (Student)it.next(); 
        if (stu.getStudentId() == studentId) {
            it.remove(); //移除该对象
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/99558.html

(0)
小半的头像小半

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!