檢視java底層原碼Iterable時產生的疑問

2021-06-29 06:12:32 字數 463 閱讀 5800

為什麼一定要實現iterable介面,為什麼不直接實現iterator介面呢?

看一下jdk中的集合類,比如list一族或者set一族,都是實現了iterable介面,但並不直接實現iterator介面。

仔細想一下這麼做是有道理的。

因為iterator介面的核心方法next()或者hasnext() 是依賴於迭代器的當前迭代位置的。

如果collection直接實現iterator介面,勢必導致集合物件中包含當前迭代位置的資料(指標)。

當集合在不同方法間被傳遞時,由於當前迭代位置不可預置,那麼next()方法的結果會變成不可預知。

除非再為iterator介面新增乙個reset()方法,用來重置當前迭代位置。

但即時這樣,collection也只能同時存在乙個當前迭代位置。

而iterable則不然,每次呼叫都會返回乙個從頭開始計數的迭代器。

多個迭代器是互不干擾的。

java無重集合Set與迭代器Iterator

set介面 t型元素的集合,不允許包含相等元素 int size 返回集合的元素個數。boolean isempty 如果集合為空,則返回true.boolean contains object o 如果集合包含與o相等的元素,則返回true.boolean containsall collecti...

java集合底層實現

set和map的關係 set代表無序,不能重複的集合 map代表key value組成的集合,是一種關聯陣列。map的key要求是不能重複,沒有順序。把map的所有key組合起來就是set。setkeyset hashmap和hashset原理 hashmap底層是用陣列鍊錶儲存的,元素是entry...

重寫java底層equals

override public booleanequals object obj else 當same為true時獲取 serverlist 和 clientlist中都存在的陣列 當same為false時 獲取在clientlist中存在而在serverlist中不存在的陣列 使用這個方法需要重寫...