簡體   English   中英

Java,從 ArrayList 中刪除對象

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

有關更多詳細信息,請查看此帖子:

迭代一個集合,在循環中刪除時避免 ConcurrentModificationException

Iterator<Integer> itr = yourlist.iterator();

// remove all even numbers
while (itr.hasNext()) {
       itr.remove();
}

這必須對您有用,解決此問題的其他方法是使用 CopyOnWriteArrayList 希望它有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM