如下代码指望输出[1, 2, 6],实际输出是[1, 2, 5, 6]。。。三种解决方法java
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Test { public static void main(String[] args) { List<Integer> intList = new ArrayList<Integer>(); Collections.addAll(intList, 1, 2, 3, 5, 6); for (int i = 0; i < intList.size(); i++) { Integer value = intList.get(i); // 符合条件,删除元素 if (value == 3 || value == 5) { intList.remove(i); } } System.out.println(intList); } }
1.使用Iteratorcode
import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; public class Test { public static void main(String[] args) { List<Integer> intList = new ArrayList<Integer>(); Collections.addAll(intList, 1, 2, 3, 5, 6); Iterator<Integer> it = intList.iterator(); while (it.hasNext()) { Integer value = it.next(); if (value == 3 || value == 5) { it.remove(); } } System.out.println(intList); } }
2.从最后一个元素开始遍历索引
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Test { public static void main(String[] args) { List<Integer> intList = new ArrayList<Integer>(); Collections.addAll(intList, 1, 2, 3, 5, 6); for (int i = intList.size() - 1; i >= 0; i--) { Integer value = intList.get(i); if (value == 3 || value == 5) { intList.remove(i); } } System.out.println(intList); } }
3.维护索引,删除一个元素后,索引-1rem
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Test { public static void main(String[] args) { List<Integer> intList = new ArrayList<Integer>(); Collections.addAll(intList, 1, 2, 3, 5, 6); for (int i = 0; i < intList.size(); i++) { Integer value = intList.get(i); if (value == 3 || value == 5) { intList.remove(i); i--; } } System.out.println(intList); } }