java arraylist 对象 删除_Java,从ArrayList中删除对象

我有一个具有静态对象ArrayList的ClassA

public static ArrayList meteorits = new ArrayList();

现在我要像这样从列表中删除一个对象

ClassA.meteorits.remove(this);

这是用Meteorit类编写的。 但是,当我想使用ArrayList中的对象时,它将引发异常。

我使用Iterator从ArrayList中删除对象,但是现在我不知道如何在这种情况下使用它。

迭代时从集合中移除元素的可能重复项

为什么ArrayList static? 我建议完全像observer设计模式那样做。 首先,在ClassA中创建一个称为public removeMetorit(Meteorit meteorit)的方法,并在Meteorit类之外的任何地方使用它。

另外,您正在从要删除的对象内部调用remove方法,这是非法的。

我希望陨石从列表中删除,我不认为它是非法的。

这是因为某个线程实际上正在for每个循环中查看此列表,也许您尝试在for每个循环的主体中删除此列表的元素?您不能删除每个元素中的元素,但是可以在迭代器循环中:

您可以使用迭代器代替每个迭代器来删除和查看列表中的元素,如下所示:

public static ArrayList meteorits = new ArrayList();

Iterator itr = meteorits.iterator();

while (itr.hasNext()) {

if (itr.next()==this) {

itr.remove();

}

}

这帮助了我,谢谢大家!!!

基本上,您需要使用迭代器来避免此类并发修改:

List list = new ArrayList<>();

for (Iterator iterator = list.iterator(); iterator.hasNext();) {

String string = iterator.next();

if (string.isEmpty()) {

iterator.remove();

}

}

有关更多详细信息,请查看此帖子:

遍历Collection,避免在循环中删除时避免ConcurrentModificationException

使用迭代器时;您需要使用迭代器使用以下方法从列表中删除项目:

iterator.remove();

Java Docs中的说明:

Removes from the underlying collection the last element returned by this iterator.

通过任何其他方式从列表中删除项目将导致您看到的ConcurrentModificationException。

我知道这一点,但是在这种情况下,我需要如何使用它的方式。

如果您可以在问题中提供更多代码片段,以便获得适当的答案; 否则很难将这种知识应用于您的情况。

Iterator itr = yourlist.iterator();

// remove all even numbers

while (itr.hasNext()) {

itr.remove();

}

这必须为您工作,解决此问题的另一种方法是使用CopyOnWriteArrayList希望对您有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值