首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Java中修改对象时迭代它?

在Java中,直接在迭代集合的同时修改集合(例如添加或删除元素)通常会导致ConcurrentModificationException。为了安全地在迭代时修改集合,你可以使用以下几种方法:

1. 使用Iteratorremove方法

如果你只需要在迭代时删除元素,可以使用Iteratorremove方法。这是最直接和安全的方法。

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");

        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String element = iterator.next();
            if (element.equals("two")) {
                iterator.remove(); // 安全地删除元素
            }
        }

        System.out.println(list); // 输出: [one, three]
    }
}

2. 使用ListIterator进行添加和删除

ListIterator不仅支持删除,还支持在迭代时添加元素。

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");

        ListIterator<String> listIterator = list.listIterator();
        while (listIterator.hasNext()) {
            String element = listIterator.next();
            if (element.equals("two")) {
                listIterator.remove(); // 删除元素
            }
            if (element.equals("three")) {
                listIterator.add("four"); // 添加元素
            }
        }

        System.out.println(list); // 输出: [one, three, four]
    }
}

3. 使用CopyOnWriteArrayList

如果你需要在多线程环境中安全地修改集合,可以使用CopyOnWriteArrayList。这种集合在每次修改时都会创建一个新的副本,因此迭代时不会抛出ConcurrentModificationException

代码语言:javascript
复制
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class Main {
    public static void main(String[] args) {
        List<String> list = new CopyOnWriteArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");

        for (String element : list) {
            if (element.equals("two")) {
                list.remove(element); // 安全地删除元素
            }
            if (element.equals("three")) {
                list.add("four"); // 安全地添加元素
            }
        }

        System.out.println(list); // 输出: [one, three, four]
    }
}

4. 使用传统的for循环

如果你不介意使用索引,可以使用传统的for循环来迭代和修改集合。

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");

        for (int i = 0; i < list.size(); i++) {
            String element = list.get(i);
            if (element.equals("two")) {
                list.remove(i); // 删除元素
                i--; // 调整索引以避免跳过下一个元素
            }
            if (element.equals("three")) {
                list.add(i + 1, "four"); // 添加元素
                i++; // 调整索引以避免重复处理新添加的元素
            }
        }

        System.out.println(list); // 输出: [one, three, four]
    }
}
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券