2011-10-01 79 views
3

我讀通過古德里奇在數據結構與算法如下:Iterator接口中的哪個方法可以刪除以前返回的元素?

Java提供通過其java.util.Iterator的接口的迭代器。我們 注意java.util.Scanner類(1.6節)實現了這個接口。此接口支持額外的(可選)方法,以便 從集合中刪除以前返回的元素。這 功能(通過移除一個iterator元素)是一種面向對象的觀點有些 爭議,但是,它是 並不奇怪,其實現由類是可選的

我不明白作者在這裏指的是。這裏討論的方法是什麼?它有什麼作用?

回答

0

remove()方法將刪除最近從next()返回的元素。

1

有問題的方法是Iterator.remove(),它是Iterator interface的一部分。

許多Iterator實例不支持它 - 如果您嘗試將其稱爲錯誤類型的迭代器,您很可能會得到一個UnsupportedOperationException

我個人並不認爲remove()作爲Iterator接口的一部分是一個非常好的主意:Iterator的主要概念目的是對集合中的元素進行單次傳遞並按順序返回這些元素。

如果您按照「做一件好事」的設計學校,那麼嘗試使用迭代器作爲修改此類集合的技術也是一個壞主意。從併發角度看,這種行爲也會引起很大的麻煩......

2

Iterator Interface中,有一個remove()函數可以選擇性地實現。 Docs說:

從底層集合中刪除迭代器返回的最後一個元素(可選操作)。這種方法只能在下一次調用時調用一次。如果除了通過調用此方法以外的任何其他方式進行迭代時修改了底層集合,則未指定迭代器的行爲。

基本上它進入迭代器產生的集合,並從原始集合中刪除當前迭代中的元素。

1
public interface Iterator 
{ 

    public abstract boolean hasNext(); 

    public abstract Object next(); 

    public abstract void remove(); 
} 

remove()方法是可選的,並從集合中移除next()返回的最後一個元素。

相關問題