java - 从迭代 ArrayList 内部删除对象的最有效方法

标签 java arrays arraylist

<分区>

我正在尝试从迭代 ArrayList 中删除一个对象,但不能从循环内部这样做,这是我目前所拥有的

        for(Pearl pearl : this.pearls){
            pearl.onDraw(canvas);

            if(fish.isCollide(pearl)){
                this.pearls.remove(pearl);
            }
        }

如果 ArrayList 大于 1,上述代码将不起作用。

我正在考虑将代码更改为如下内容,但更想知道是否有更简单的方法。

       List<Pearl> pearls_delete = new ArrayList<Pearl>();


       for(Pearl pearl : this.pearls){
            pearl.onDraw(canvas);

            if(fish.isCollide(pearl)){
                pearls_delete.add(pearl);
            }
        }

        this.pearls.removeAll(pearls_delete);

最佳答案

使用迭代器

Iterator<Pearl> iter = this.pearls.iterator();
while ( iter.hasNext() ) {
   Pearl pearl = iter.next();
   // logic
   iter.remove();
} 

或者只是

for (Iterator<Pearl> iter = pearls.iterator(); iter.hasNext();) {
   Pearl pearl = iter.next();
   // logic
   iter.remove();
} 

关于java - 从迭代 ArrayList 内部删除对象的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26875813/

相关文章:

java - 如何配置 spring mvc/jsp 输出 xhtml 而不是 html?

java - Android:通过单击按钮将一个 Activity 中的 TextView 添加到另一个 Activity 中的 ListView

javascript - 足球结果的最佳变量类型是什么?

javascript - 如何使用 lodash 或 javascript 过滤对象

java - 如何将 SQLite 一列数据转换为纯 int?

java - 如果String是一个对象,但与Array(也是一个对象)不同,为什么我们可以直接打印出它的值?

java - 使用 Retrofit 将数据发布到数据库

javascript - 使用 lodash 在 JavaScript 中对多行数据进行排序

java - 反转 ArrayList(理解代码)

kotlin - 根据字符串值动态过滤数组列表 - kotlin