gpt4 book ai didi

java - 使用迭代器时从列表中删除项目而不访问迭代器 Java

转载 作者:行者123 更新时间:2023-11-30 06:55:56 24 4
gpt4 key购买 nike

我想在遍历迭代器时从迭代器中删除项目,但也能够使用另一种方法从列表中删除项目。这是我当前使用的引发错误的代码。我知道 iterator.remove 方法,但这在我的情况下不起作用,因为删除时需要调用附加方法。 (gl删除纹理)

public void cleanUp() {
glDeleteTextures(textureID);
textures.remove(this);
}

public static void cleanUpAllTextures() {
Iterator<Texture> i = textures.iterator();
while (i.hasNext()) {
i.next().cleanUp();
}

}

更新:感谢 leeyuiwah 的帮助。上述方法对我不起作用,因为我需要能够在单个纹理对象上调用 deleteTextures() 方法,而不是同时调用所有纹理对象。我决定采用的方法是:

public void cleanUp() {
glDeleteTextures(textureID);
textures.remove(this);
}

public static void cleanUpAllTextures() {
while(textures.size() > 0) {
textures.get(0).cleanUp();
}
}

最佳答案

我认为您可能需要重新考虑您的设计。你想做的事不推荐。以下摘录自Sun/Oracle's Tutorial on Java Collection

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.

已更新

设计变更的示例如下:

public void deleteTextures() {
glDeleteTextures(textureID);
}

public static void cleanUpAllTextures() {
Iterator<Texture> i = textures.iterator();
while (i.hasNext()) {
i.next().deleteTextures();
i.remove();
}
}

关于java - 使用迭代器时从列表中删除项目而不访问迭代器 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41817594/

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