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

时间:2014-11-11 22:29:50

标签: 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);

1 个答案:

答案 0 :(得分:9)

使用Iterator

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();
}