2016-08-16 87 views
-2

從我所瞭解的情況來看,兩者都用於返回不可修改的對象,但爲什麼會使用另一個呢?返回一個Iterator和一個不可修改的列表有什麼區別?

編輯:我的錯誤,迭代器不是不可修改的。但我仍然不清楚爲什麼可以使用迭代器而不是List。

+1

你能解釋列表和迭代器之間的區別嗎? – chrylis

+0

您可以通過比較['Iterator'](https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html)和['List'](https:// docs.oracle.com/javase/8/docs/api/java/util/List.html)接口。 – shmosel

+0

迭代器不是不可修改的,每次調用next()時,您都可以得到不同的結果,並且最終在結束時可能會失敗。 –

回答

1

當您需要列表時,返回List;當需要迭代器時返回Iterator。它們是完全不同的數據結構,用於不同的目的。

另外,Iterator也許能夠通過remove()方法(它將刪除next()返回的最後一個項目)修改基礎集合。

編輯(回覆OP的編輯):如果您特別想阻止客戶端代碼查看底層列表,或想要強制按順序訪問元素,則需要返回Iterator。還需要您編寫一個iterator()方法,當您的類實現Iterable時返回Iterator。還有一個有趣的情況是返回一個Iterator,它迭代了一個未確定的項目集合,這些項目在請求之前可能甚至不存在於內存中。 (例如,考慮在基於AI的應用程序中進行狀態空間搜索。)

+0

我感到困惑的是(不可修改)列表和迭代器之間的差異。一個迭代器只允許你迭代一個列表。一個清單可以做到這一點,更多。 – marizal

+0

@marizal確實如此。那麼什麼不清楚? – shmosel

+0

返回要麼只是給客戶端相同的信息,只是比另一個更嚴格。什麼是返回一個比另一個更好的情況的例子? – marizal

相關問題