[英]Difference Between Iterator remove vs ArrayList remove?
要从ArrayList中删除元素,我们可以使用-
在这些情况下,语法是不同的。 所以
任何详细的解释/链接,高度赞赏。
如果从迭代器自身的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.