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

mk_*_*_89 3 java arrays arraylist

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

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

            if(fish.isCollide(pearl)){
                this.pearls.remove(pearl);
            }
        }
Run Code Online (Sandbox Code Playgroud)

如果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);
Run Code Online (Sandbox Code Playgroud)

Jef*_*rey 9

用一个 Iterator

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

或者干脆

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