Java中有兩個不同的接口用於迭代,它們很重要,Iterable
和Iterator
。他們每個人都有不同的目的。
可迭代
當事情實現了這個接口,這意味着它可以重複的。
List<String> elements = ... ; // List is an instance of Iterable
for (String element : elements)
System.out.println(element);
凡是是Iterable
一個實例可以在for-each循環使用:因爲Java提供了捷徑,用於遍歷東西使用for-each循環實現Iterable
這對我們來說是有益的。如果你有自己的自定義類,它實現Iterable
,那麼你可以使用在換每個以及:
MyDeque<String> elements = ... ;
for (String element : elements)
System.out.println(element);
這給我們帶來...
迭代
這個接口實際上是如何進行迭代。的for-each循環編譯成這樣的:
MyDeque<String> elements = ... ;
for (Iterator<String> $iter = elements.iterator(); $iter.hasNext();) {
String element = $iter.next();
System.out.println(element);
}
這段代碼是功能等效的for-each上方。 hasNext()
是繼續條件(我有更多的東西給你嗎?)和next()
實際上給你的下一個元素,或拋出NoSuchElementException
,如果我們沒有其他的東西。
讓你的自定義實現Iterable
的目的只是爲了讓你可以使用類似for
循環的東西遍歷你的雙端隊列中的元素。它的Iterator
實現是讓你實際上做那個迭代。
當你實現一個接口時,你必須實現它的方法。你能澄清你在這方面的疑問嗎? iteratior()應該每次調用它時都會返回一個新的迭代器。 – 2014-10-01 17:59:00
您必須創建一個實現'Iterator- '的實例並在iterator()方法中返回它。 –
Eran
2014-10-01 17:59:03
接口是一個'contract',它指定了一些方法及其行爲。爲了實現一個接口,你的類必須綁定到那個契約,並提供那些應該按預期工作的方法。 – SJuan76 2014-10-01 18:00:08