Java中List循环遍历的时候删除当前对象(自己)
方法一
ArrayList<String> list = new ArrayList<String>(); list.add("one"); list.add("two"); list.add("two"); list.add("two"); list.add("two"); for(int i=0;i<list.size();i++){ if(list.get(i).equals("two")){ list.remove(i); } } System.out.println(list);
结果:
Java代码
[one, two, two]
方法二
ArrayList<String> list = new ArrayList<String>(); list.add("one"); list.add("two"); list.add("two"); list.add("two"); list.add("two"); for(String s:list){ if(s.equals("two")){ list.remove(s); } } System.out.println(list);
结果:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at Test.main(Test.java:22)
方法三:
ArrayList<String> list = new ArrayList<String>(); list.add("one"); list.add("two"); list.add("two"); list.add("two"); list.add("two"); Iterator<String> iter = list.iterator(); while(iter.hasNext()){ String s = iter.next(); if(s.equals("two")){ iter.remove(); } } System.out.println(list);
结果:
Java代码
[one]
方法四:
ArrayList<String> list = new ArrayList<String>(); list.add("one"); list.add("two"); list.add("two"); list.add("two"); list.add("two"); for(int i=0;i<list.size();i++){ if(list.get(i).equals("two")){ list.remove(i); i--; } } System.out.println(list);
结果:
Java代码
[one]
遍历list过程中删除其中的元素,结论:
1、用迭代器是OK的。
2、用fori循环也是OK的,但是要注意控制i++,当有元素删除时,不执行i++。