【问题标题】:Most efficient way to remove object from inside of an iterating ArrayList [duplicate]从迭代ArrayList中删除对象的最有效方法[重复]
【发布时间】:2014-11-11 22:29:50
【问题描述】:

我正在尝试从迭代的 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);

【问题讨论】:

  • 您的解决方案很常见。没有更简单的解决方案。
  • @libik 这是不正确的。在下面使用Iterator 查看我的解决方案

标签: java arrays arraylist


【解决方案1】:

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

【讨论】:

  • 谢谢,代码很漂亮
猜你喜欢
  • 2014-07-12
  • 1970-01-01
  • 2022-10-19
  • 2020-12-17
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 2016-07-08
相关资源
最近更新 更多