[英]Questions about Iterator Interface
我正在研究 Java.util 包的基本接口和類。 現在接口 Set 是 Collection 和 Iterable 的子類,所以 Set 有 Iterator 模塊。 那么為什么我使用迭代器接口的引用呢?
Iterator<String> iterx = x.iterator();
Iteratr 也是一個接口。 但是我沒有看到有關 Iterable 接口和 Iterator 接口的任何關系。 Iterable 有一個名為 Iterator 的模塊。 寫起來不會更正確
Iterable.Iterator iterx = x.iterator();
因為 x.iterator 調用的是 Iterable 繼承的 Set 的 moudle,而不是調用 Iterator 接口。
我有什么不明白的?
Iterable 接口表示特定的 Collection 是可迭代的,這意味着您可以使用 Iterator 對其進行迭代。
它只有一種方法,即 iterator() 返回一個 Iterator。 任何集合,例如實現 Iterable 的 List 都提供了 iterator() 方法的實現。
Iterator 也是一個接口,它定義了迭代過程,它提供了 next()、hasNext() 和 remove() 方法,可用於控制迭代、訪問元素並刪除它。
您使用Iterator<String>
的原因與在其中使用String
原因相同
String stringx = x.toString()
該方法(“模塊”的正確名稱)聲明它返回一個該類型的對象。 方法可以返回任何不相關的類型,您必須調整和使用它們給您的變量類型。
Iterator
在概念上與Iterable
相關,但它們並不相互繼承。 實際上, Iterator
允許您訪問與生成它的Iterable
相同的數據,這實際上只是約定。
但是Iterator
的設計/約定是,您可以在迭代器的生命周期中對項目集合進行一次迭代(重復hasNext()
?好的給next()
!一遍又一遍,直到沒有下一個。)。 如果你想再次迭代,你必須得到一個新的Iterator
。 這就是Iterable
的責任:它可以在您每次詢問時生成一個新的Iterator
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.