你可以在Object实例中使​​用remove。(this)表示一个ArrayList吗?

时间:2014-03-03 15:38:07

标签: java object arraylist

如果我有一个名为foo的静态ArrayList,它持有名为ServerThread的对象,我是否可以调用 foo.remove(this) 从ServerThread实例中删除自己的ArrayList?

3 个答案:

答案 0 :(得分:2)

是的,这就是ArrayList#remove(和List#remove一般)的用途。请确保如果您将此列表与多个线程共享,则可以执行任何适当的锁定/同步,以确保在另一个线程中对其进行迭代时不会对其进行修改等。


正如Woot4Moo在评论中指出的那样,ArrayList可能不是理想的选择,如果你做了很多删除。您可以考虑LinkedList

答案 1 :(得分:1)

是。如果您查看ArrayList#remove(Object)的源代码,您会看到它使用equals。更一般地说,这正是您使用ArrayList#remove(Object)的原因;删除对象的特定实例(如果它存在于列表中)。

您使用列表的方式有点令人担忧。如果从多个线程进行操作,您可能希望确保保护对列表的访问。


正如评论中所指出的,如果你做了很多删除,你可能不想使用ArrayList。这是因为总体来说它是O(n)操作,因为您必须在支持ArrayList的数组中找到所需的元素,然后将所有其他元素向上移动。但是对于LinkedList,您只需找到元素(在最坏的情况下可以O(n),但大多数情况下都不应该这样做。)

答案 2 :(得分:0)

是的,为什么不呢。我猜你的怀疑是因为看起来线程是通过删除对自身的引用来“自杀”。但是当将'this'作为函数参数传递时没有特殊的行为......它只是列表中的一个对象,就像其他任何对象一样。