在日常开发过程中, 我们往往需要对List集合进行遍历, 然后进行过滤操作, 将不需要或者非法的元素进行移除
常用的遍历方法有两种: foreach、Iterator
1. 使用 iterator 遍历然后进行过滤操作, 一切都木有问题, 直接上代码
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
if (it.next() == 5) { // 假设过滤掉值为5的元素
it.remove();
}
}
}
2. 如果使用 foreach 遍历然后进行过滤操作, 如果对元素进行过滤, 则List集合的列表长度也随之递减, 由于初始的遍历长度是未进行操作前的List集合的长度, 所以对元素进行过滤操作的同时, 我们也需要对遍历的index进行递减, 否则继续遍历将会抛出OutOfIndexException
异常
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
for (int i = 0, len = list.size(); i < len; i++) {
if (list.get(i) == 5) { // 假设过滤掉值为5的元素
list.remove(i);
len--; // 始终遍历的是list的长度, 防止抛出OutOfIndexException异常
i--; // 遍历位于被移除元素之后的元素, 防止遍历过程中出现跳跃现象
}
}
}