日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中 Iterable 和 Iterator 的区别

發布時間:2025/3/14 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中 Iterable 和 Iterator 的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、Iterable接口

Iterable接口 (java.lang.Iterable) 是Java集合的頂級接口之一。我們首先看下這這個接口在JDK中的定義:

package java.lang; public interface Iterable<AnyType> { Iterator<AnyType> iterator(); }

?

(1)可見,Iterable接口中只包含一個方法,就是一個iterator()方法,用來返回一個Iterator類型的對象,或者說返回一個實現了Iterator接口的對象。

(2)實現了Iterable接口的類可以擁有增強的for循環,即只要實現了Iterable接口的類,就可以使用Iterator迭代器了。如

public static <AnyType> void print(Collection<AnyType> coll) {for(AnyType item: coll)System.out.println(item); }

?

Tip:注意這里的函數輸入參數Collection<AnyType> coll,其中coll是個接口變量。本來接口是不能用new來實例化一個接口的,即不能構造接口對象,但是可以用來聲明接口變量,而且接口變量必須引用實現了接口的類對象。

(3)集合Collection、List、Set都是Iterable的實現類,所以他們及其他們的子類都可以使用foreach進行迭代。

2、Iterator接口

Iterator接口在JDK中的定義:

package java.util; public interface Iterator<AnyType> { boolean hasNext(); AnyType next(); void remove(); }

?

(1)當編譯器見到一個正在用于Iterable對象的增強的for循環的時候,它用對iterator()方法的調用來代替增強的for循環以得到一個Iterator對象,然后調用next和hasNext。我們可以給出iterator()方法的定義

因此,上面Iterable例程可以改寫為:

public static <AnyType> void print(Collection<AnyType> coll) {Iterator<AnyType> itr = coil.iterator();while(itr.hasNext()){AnyType item = itr.next();System.out.println(item);} }

(2)Iterator接口中的核心方法next(),hasNext(),remove(),都是依賴當前位置。如果這些集合直接實現Iterator接口,則勢必導致集合對象中包含當前迭代位置的數據(指針)。當集合在不同方法間進行傳遞的時候,由于當前迭代位置不可知,所以next()的結果也不可知。除非再為Iterator接口添加一個reset()方法,用來重置當前迭代位置。 而當實現Iterable則不然,每次調用都返回一個從頭開始的迭代器,各個迭代器之間互不影響。

3、綜合應用

我們后面會自己實現數據結構ArrayList,其中就用到了Iterable接口和Iterator接口,我們看下這個綜合的例子

// Obtains an Iterator object used to traverse the collectionpublic java.util.Iterator<AnyType> iterator(){return new ArrayListIterator();}/*** This is the implementation of the ArrayListIterator.* It maintains a notion of a current position and * the implicit reference to the MyArrayList.**/private class ArrayListIterator implements java.util.Iterator<AnyType>{private int current = 0;private boolean okToRemove = false;public boolean hasNest(){return current<size();}public AnyType next(){if(!hasNext())throw new java.util.NoSuchElementException();okToRemove = true;return theItems[current++];}public void remove(){if(!okToRemove)throw new IllegalStateException();MyArrayList.this.remove(--current);okToRemove = false;}}

其中,iterator()方法就直接返回ArrayListIterator類的一個實例,該類是一個實現Iterator接口的類。

?

?

via: http://blog.csdn.net/lipengcn/article/details/51700153

?

轉載于:https://www.cnblogs.com/whlshot/p/8000619.html

總結

以上是生活随笔為你收集整理的Java中 Iterable 和 Iterator 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。