繁体   English   中英

迭代器删除与ArrayList删除之间的区别?

[英]Difference Between Iterator remove vs ArrayList remove?

要从ArrayList中删除元素,我们可以使用-

  1. 迭代器在迭代时使用迭代器remove()。
  2. 对于ArrrayList remove()不需要迭代。

在这些情况下,语法是不同的。 所以

  • 两者内部都使用相同的逻辑吗?
  • 除了逻辑之外,还有什么不同吗?
  • 哪一个更好?

任何详细的解释/链接,高度赞赏。

如果从迭代器自身的remove()方法以外的其他方式从基础集合中删除元素,则迭代器可能会引发ConcurrentModificationException

因此,如果您需要在遍历集合时删除元素,则可以使用Iterator.remove()进行此操作,但是不能使用Collection.remove()进行此操作,而又不冒获取异常的风险。

remove是所有Iterable(实现接口Itarable)的对象应实现的方法(如果为否,则应抛出UnsupportedOperationException)。 它的工作方式始终取决于实现它的对象。

这意味着ArrayList可以用与LinkedList完全不同的方式来实现它。

在Iterator中删除对象要求您迭代(查找)要删除的对象。

在ArrayList中使用remove方法(没有删除,我在Javadoc中可以看到: http : //docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html )为您找到对象并删除它。 实际上,它会移动基础数组中的对象以填充通过删除对象创建的“间隙”,因此,如果要经常删除列表中的项目,则可以使用LinkedList。

此外,当您遍历列表时,如果要以其他方式(而不是通过迭代器方法)修改集合,则会导致异常。

您的问题的确切答案是:1.否,它们不使用不同的逻辑,此外Iterator甚至可能不允许删除对象(UnsupportedOperationException)2.您不能在进行迭代时通过ArrayList remove删除对象,也不能删除位置4的对象通过使用Iterator在ArrayList中,您必须“手动”迭代4次。 3.这取决于您是否已经知道要删除哪个对象,还是首先要在迭代过程中检查所有对象并决定是否删除。 另外-如果要经常删除对象,最好使用LinkedList,而不是ArrayList。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM