1. 程式人生 > >java中的Iterator和Iterable 區別 ,以及為麼要有iterable介面

java中的Iterator和Iterable 區別 ,以及為麼要有iterable介面

java.lang.Iterable
java.util.Iterator

來自百度知道:
Iterator是迭代器類(其實在javaAPI中其也是一個介面),而Iterable是介面。
好多類都實現了Iterable介面,這樣物件就可以呼叫iterator()方法(返回一個Iterator物件)。
一般都是結合著用,比如
HashMap類就實現了Iterable介面,而要訪問或打印出Map中所有內容時,就可以這樣: HashMap hashMap;
Iterator iter = hashMap.iterator();
while(iter.hashNext()) {
  String s = iter.next();
}

轉至:
http://perfy315.iteye.com/blog/1459201

為什麼一定要實現Iterable介面,為什麼不直接實現Iterator介面呢?
      看一下JDK中的集合類,比如List一族或者Set一族,都是實現了Iterable介面,但並不直接實現Iterator介面。
仔細想一下這麼做是有道理的。

      因為Iterator介面的核心方法next()或者hasNext() 是依賴於迭代器的當前迭代位置的。
      如果Collection直接實現Iterator介面,勢必導致集合物件中包含當前迭代位置的資料(指標)。
      當集合在不同方法間被傳遞時,由於當前迭代位置不可預置,那麼next()方法的結果會變成不可預知。
      除非再為Iterator介面新增一個reset()方法,用來重置當前迭代位置。
      但即時這樣,Collection也只能同時存在一個當前迭代位置。
      而Iterable則不然,每次呼叫都會返回一個從頭開始計數的迭代器。
      多個迭代器是互不干擾的。

相關推薦

javaIteratorIterable 區別 以及iterable介面

java.lang.Iterable java.util.Iterator 來自百度知道: Iterator是迭代器類(其實在javaAPI中其也是一個介面),而Iterable是介面。 好多類都實現了Iterable介面,這樣物件就可以呼叫iterator()方法

JavaProcessRuntime()使用以及呼叫cmd命令阻塞在process.waitfor( )的問題解決

轉自:http://249wangmang.blog.163.com/blog/static/52630765201261334351635/ 最近在java中呼叫perl程式,由於perl中使用斯坦福分詞器,有很多控制檯輸出,導致一直阻塞在process.waitfor

Javaequals==的區別equalshashcode的區別

Java中的資料型別,可分為兩類: 1.基本資料型別,也稱原始資料型別。byte,short,char,int,long,float,double,boolean   他們之間的比較,應用雙等號(==),比較的是他們的值。 2.複合資料型別(類)   當他們用(==)進行比較

mybatis ${} #{} 的區別以及轉義符

1)#{}表示一個佔位符號,通過#{}可以實現preparedStatement向佔位符中設定值,自動進行java型別和jdbc型別轉換,#{}可以有效防止sql注入。#{}可以接收簡單型別值或pojo屬性值。如果parameterType傳輸單個簡單型別值,#{}括號中可以是value或其它名稱。

JavaArrayListLinkedList區別以及時間複雜度與空間複雜度

Java中ArrayList和LinkedList區別以及時間複雜度與空間複雜度? 一.時間複雜度 二.空間複雜度 三.總結    一般大家都知道ArrayList和LinkedList的大致區別: 1.ArrayList是實現了基於動態陣

python @classmethod @staticmethod區別以及方法引數clsself的區別

staticmethod 首先來看@staticmethod,這個裝飾器很好理解,就是讓類中的方法變成一個普通的函式(因為是普通函式,並沒有繫結在任何一個特定的類或者例項上。所以與不需要物件例項化就可以直接呼叫)。可以使用類或者類的例項呼叫,並且沒有任何隱含引數的傳入,

javaArrayListLinkedList區別

插入 list 新的 查找 arr tro 基於 列表 時間復雜度 ArrayList和LinkedList最主要的區別是基於不同數據結構 ArrayList是基於動態數組的數據結構,LinkedList基於鏈表的數據結構,針對這點,從時間復雜度和空間復雜度來看主要區別:

jsdecodeURI()encodeURI()區別decodeURIComponentencodeURIComponent區別

nbsp sch www 問題 encode 替換 副本 字符替換 序列 decodeURI()定義和用法:decodeURI()函數可對encodeURI()函數編碼過的URI進行解碼.語法:decodeURI(URIstring)參數描述:URIstring必需,一個字

javanull是什麽以及使用註意的事項

拆箱 大小寫 pan 沒有 使用 類型 區別 null lean 1.null既不是對象也不是一種類型,它僅是一種特殊的值,你可以將其賦予任何引用類型,你也可以將null轉化成任何類型,例如: Integer i=null; Float f=null; String

javaequals==的區別

ML int .net 重寫 com span double str 文獻 (表達可能存在錯誤,需進一步完善) 1、首先搞清楚java裏面的數據類型包括: 基本數據類型和引用數據類型 2、數據類型 基本數據類型: byte,short(2 byte),int(4 byt

JavaArrayListLinkedList區別(轉)

java linked .com -s lan font array href spa 具體詳情參考原博客: http://pengcqu.iteye.com/blog/502676Java中ArrayList和LinkedList區別(轉)

Javaequals==的區別總結

1)對於==,如果作用於基本資料型別的變數,則直接比較其儲存的 “值”是否相等;如果作用於引用型別的變數,則比較的是所指向的物件的地址。 2)對於equals方法,equals方法是Object的,所有繼承了Object類的類都有該方法,注意:equals方法不能作用於基本資料型別的變數

JavaerrorException區別

1、error—錯誤 : 是指程式無法處理的錯誤,表示應用程式執行時出現的重大錯誤。 例如jvm執行時出現的OutOfMemoryError以及Socket程式設計時出現的端口占用等程式無法處理的錯誤 2、Exception — 異常 :異常可分為執行時異常跟編譯異常) 1.執行時異常:

JavainstanceofisInstance區別

instanceof: obj.instanceof(class) 判斷這個物件是不是這種型別, 1.一個物件是本身類的一個物件 2.一個物件是本身類父類(父類的父類)和介面(介面的介面)的一個物件 3.所有物件都是Object 4.凡是null有關的都是fals

JavaComparableComparator區別小結

回到頂部一、Comparable簡介   Comparable是排序介面。若一個類實現了Comparable介面,就意味著該類支援排序。實現了Comparable介面的類的物件的列表或陣列可以通過Collections.sort或Arrays.sort進行自動排序。   此外,實現此介面的物件可以用作有序對映

字串處理sizeof與strlen區別以及末尾的\0

char *ch = "wonima aisaoziaaa"; int n = sizeof(ch); // 指標長度,對於64平臺來說,值為8 int nn = sizeof(*ch); // 一個字元的長度,值為1 int nnn = strlen(ch); //

JavaArrayListLinkedList區別(常見面試題)

一般大家都知道ArrayList和LinkedList的大致區別:     1.ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構。     2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為Lin

後端---JavaArrayListLinkedList區別聯絡

ArrayList和LinkedList的區別和聯絡 在一個多月之前,我曾寫過一篇部落格想要迅速簡潔的瞭解Java中所有的集合型別(List、Set、Map),然後一個月多後的我不得已又抱起《Java核心卷I 》仔細研讀,這是為什麼呢??? 是因為“溫故而知新”還是因為“書讀百遍其

JavaHashtableHashMap區別

第一,繼承和實現不同 public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializ

Java Equals==的區別

在談論equals和==的區別前,我們先簡單介紹一下JVM中記憶體分配的問題。 在JVM中 記憶體分為棧記憶體和堆記憶體。二者有什麼區別呢? 當我們建立一個物件(new Object)時,就會呼叫它的建構函式來開闢空間,將物件資料儲存到堆記憶體中,與此同時在棧記憶體中生成對