簡體   English   中英

關於迭代器接口的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM