gpt4 book ai didi

java - 在android中迭代它时从堆栈中删除一个项目

转载 作者:行者123 更新时间:2023-12-01 04:19:55 25 4
gpt4 key购买 nike

通常,在java中,要从堆栈(或集合)中删除项目,我会执行以下操作:

Stack<Particle> particles = new Stack<Particle>();
int i = 0, ;
while(i < particles.size()) {
if(particles.elementAt(i).isAlive()) {
i ++;
} else {
particles.remove(i);
}
}

我已经搜索了 android 文档并用谷歌搜索了很多次,试图获得相同的结果,但似乎没有任何效果。有人可以帮我吗?

最佳答案

尝试使用Iterator进行循环,因为根据Oracle Iterator.remove()是唯一安全的方法在迭代期间从Collection(包括Stack)中删除项目。

来自http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html

Note that Iterator.remove is the only safe way to modify a collection during iteration; the behavior is unspecified if the underlying collection is modified in any other way while the iteration is in progress.

所以像下面这样的东西应该有效:

Stack<Particle> particles = new Stack<Particle>();
... // Add a bunch of particles
Iterator<Particle> iter = particles.iterator();
while (iter.hasNext()) {
Particle p = iter.next();
if (!p.isAlive()) {
iter.remove();
}
}

我已经在真正的 Android 应用程序中使用了这种方法( OneBusAway Android - 请参阅代码 here ),并且它对我有用。请注意,在此应用程序的代码中,我还包含了一个 try/catch block ,以防平台引发异常,在这种情况下,只需迭代集合的副本,然后从原始集合中删除该项目。

对于您来说,这看起来像:

try {
... // above code using iterator.remove
} catch(UnsupportedOperationException e) {
Log.w(TAG, "Problem removing from stack using iterator: " + e);
// The platform apparently didn't like the efficient way to do this, so we'll just
// loop through a copy and remove what we don't want from the original
ArrayList<Particle> copy = new ArrayList<Particle>(particles);
for (Particle p : copy) {
if (!p.isAlive()) {
particles.remove(p);
}
}
}

如果平台支持,您将获得更有效的方法,如果不支持,您仍然有备份。

关于java - 在android中迭代它时从堆栈中删除一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19041763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com