[英]How does the Java class ArrayList return an Iterator Object?
我知道您可以通過在創建的ArrayList上調用iterator()方法來獲得它,但是該方法是什么樣的?
由於Iterator只是用Java定義的接口,因此我不確定ArrayList如何傳遞回Iterator的具體實現嗎?
我知道如何為自己的類自己實現這些...我想知道Java的ArrayList是如何實現的...也許我不知道的標准庫中有具體的Iterator類?
你自己就能找到
System.out.println(new ArrayList().iterator().getClass());
我可能也得到class java.util.ArrayList$Itr
。 $
符號表示內部類(是否靜態)。 如果我們進入源代碼,我們將看到
public Iterator<E> iterator() {
return new Itr();
}
然后在這個文件中
private class Itr implements Iterator<E> { ... }
ArrayList
類在內部具有Iterator
的實現。 要么,要么它具有一個內部方法,該方法從另一個類構造一個Iterator
實現。 我不確定的原因是因為唯一的了解方法就是瀏覽源代碼,而我還沒有做過。 擁有接口的關鍵是您不需要了解內部實現。 您只知道Iterator
接口的功能-接口規范定義了該接口。
是的,在某處有Iterator
接口的具體實現。 ArrayList
類使用此類實現中的構造函數,創建對象並將其返回給您。
迭代器看起來像這樣
Iterator<T> iterator() {
return new Iterator<T>(this);
}
每次返回一個新的迭代器。
注意,您應該在代碼中執行類似的操作,以免最終陷入無窮的for循環
Iterator iterator = myCollections.iterator();
使用此迭代器對象可以遍歷您的集合。 如果你這樣做
while(myCollections.iterator().hasNext) {
System.out.println(myCollections.iterator().next());
}
只打印第一個對象將是一個無休止的循環。
為了回答您的問題,它來自AbstractList ,它具有具體的實現。
ArrayList在內部將迭代器實現為嵌套類。
private class Itr implements Iterator<E> {
int cursor; // index of next element to return
int lastRet = -1; // index of last element returned; -1 if no such
int expectedModCount = modCount;
public boolean hasNext() {
return cursor != size;
}
然后通過iterator()方法返回它的對象
public Iterator<E> iterator() {
return new Itr();
}
您可以參考源代碼以更好地理解ArrayList源代碼
希望這會有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.