Java干货

Java干货 - 遍历List集合进行过滤删除

2017-10-18  本文已影响0人  markchan

在日常开发过程中, 我们往往需要对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--; // 遍历位于被移除元素之后的元素, 防止遍历过程中出现跳跃现象
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读