[英]Java , Removing object from ArrayList
我有 ClassA,它有一個靜態的 ArrayList 對象
public static ArrayList<Meteorit> meteorits = new ArrayList<Meteorit>();
現在我想像這樣從這個列表中刪除一個對象
ClassA.meteorits.remove(this);
這是用 Meteorit 類編寫的。 但是當我想使用 ArrayList 中的對象時它會拋出異常。
Exception in thread "LWJGL Application" java.util.ConcurrentModificationException
我使用 Iterator 從 ArrayList 中刪除對象,但現在我不知道如何在這種情況下使用它。
這是因為某個線程實際上正在 for each 循環中查看此列表,也許您正試圖在 for-each 的主體中刪除此列表的元素? 你不能在 for-each 中刪除元素,但你可以在迭代器循環中:
您可以使用迭代器而不是 for each 來刪除和查看列表中的元素,如下所示:
public static ArrayList<Meteorit> meteorits = new ArrayList<Meteorit>();
Iterator<Meteorit> itr = meteorits.iterator();
while (itr.hasNext()) {
if (itr.next()==this) {
itr.remove();
}
}
使用迭代器時; 您需要使用迭代器使用以下方法從列表中刪除項目:
iterator.remove();
從 Java Docs 說:
從底層集合中移除此迭代器返回的最后一個元素。
通過任何其他方式從列表中刪除項目將導致您看到的 ConcurrentModificationException。
基本上,您需要使用迭代器來避免這種並發修改:
List<String> list = new ArrayList<>();
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
String string = iterator.next();
if (string.isEmpty()) {
iterator.remove();
}
}
有關更多詳細信息,請查看此帖子:
Iterator<Integer> itr = yourlist.iterator();
// remove all even numbers
while (itr.hasNext()) {
itr.remove();
}
這必須對您有用,解決此問題的其他方法是使用 CopyOnWriteArrayList 希望它有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.