集合總是需要迭代的,我們確實(shí)需要探察集合中的每一個(gè)元素,所以集合接口都無一例外的繼承了Iterable<T> 接口 ,而該接口的唯一方法 :
Iterator<T> |
iterator() 返回一個(gè)在一組 T 類型的元素上進(jìn)行迭代的迭代器。 |
可以返回一個(gè)所有集合接口都繼承了的Iteraor接口,如此集合框架的所有子類都可以迭代顯示其元素!
例如下:集合的根接口Collection繼承了Iterator接口:
- public interface Collection<E>
- extends Iterable<E>
Collection 層次結(jié)構(gòu) 中的根接口。 Collection 表示一組對(duì)象,這些對(duì)象也稱為 collection 的元素。 一些 collection 允許有重復(fù)的元素,而另一些則不允許。 一些 collection 是有序的,而另一些則是無序的。 JDK 不提供此接口的任何直接 實(shí)現(xiàn):它提供更具體的子接口(如 Set 和 List)實(shí)現(xiàn)。 此接口通常用來傳遞 collection,并在需要最大普遍性的地方操作這些 collection。
包 (bag) 或多集合 (multiset)(可能包含重復(fù)元素的無序 collection)應(yīng)該直接實(shí)現(xiàn)此接口。
所有通用的 Collection 實(shí)現(xiàn)類(通常通過它的一個(gè)子接口間接實(shí)現(xiàn) Collection)應(yīng)該提供兩個(gè)“標(biāo)準(zhǔn)”構(gòu)造方法:一個(gè)是 void(無參數(shù))構(gòu)造方法,用于創(chuàng)建空 collection;另一個(gè)是帶有 Collection 類型單參數(shù)的構(gòu)造方法,用于創(chuàng)建一個(gè)具有與其參數(shù)相同元素新的 collection。實(shí)際上,后者允許用戶復(fù)制任何 collection,以生成所需實(shí)現(xiàn)類型的一個(gè)等效 collection。盡管無法強(qiáng)制執(zhí)行此約定(因?yàn)榻涌诓荒馨瑯?gòu)造方法),但是 Java 平臺(tái)庫中所有通用的 Collection 實(shí)現(xiàn)都遵從它。
此接口中包含的“破壞性”方法,是指可修改其所操作的 collection 的那些方法,如果此 collection 不支持該操作,則指定這些方法拋出 UnsupportedOperationException。如果是這樣,那么在調(diào)用對(duì)該 collection 無效時(shí),這些方法可能,但并不一定拋出 UnsupportedOperationException。例如,如果要添加的 collection 為空且不可修改,則對(duì)該 collection 調(diào)用 addAll(Collection) 方法時(shí),可能但并不一定拋出異常。
一些 collection 實(shí)現(xiàn)對(duì)它們可能包含的元素有所限制。例如,某些實(shí)現(xiàn)禁止 null 元素,而某些實(shí)現(xiàn)則對(duì)元素的類型有限制。試圖添加不合格的元素將拋出一個(gè)未經(jīng)檢查的異常,通常是 NullPointerException 或 ClassCastException。試圖查詢是否存在不合格的元素可能拋出一個(gè)異常,或者只是簡單地返回 false;某些實(shí)現(xiàn)將表現(xiàn)出前一種行為,而某些實(shí)現(xiàn)則表現(xiàn)后一種。較為常見的是,試圖對(duì)某個(gè)不合格的元素執(zhí)行操作且該操作的完成不會(huì)導(dǎo)致將不合格的元素插入 collection 中,將可能拋出一個(gè)異常,也可能操作成功,這取決于實(shí)現(xiàn)本身。這樣的異常在此接口的規(guī)范中標(biāo)記為“可選”。
此接口是 Java Collections Framework 的成員。
Collections Framework 接口中的很多方法是根據(jù) equals 方法定義的。例如,contains(Object o) 方法的規(guī)范聲明:“當(dāng)且僅當(dāng)此 collection 包含至少一個(gè)滿足 (o==null ? e==null :o.equals(e)) 的元素 e 時(shí),才返回 true。”不 應(yīng)將此規(guī)范理解為它暗指調(diào)用具有非空參數(shù) o 的 Collection.contains 方法會(huì)導(dǎo)致為任意的 e 元素調(diào)用 o.equals(e) 方法?呻S意對(duì)各種實(shí)現(xiàn)執(zhí)行優(yōu)化,只要避免調(diào)用 equals 即可,例如,通過首先比較兩個(gè)元素的哈希碼。(Object.hashCode() 規(guī)范保證哈希碼不相等的兩個(gè)對(duì)象不會(huì)相等)。較為常見的是,各種 Collections Framework 接口的實(shí)現(xiàn)可隨意利用基礎(chǔ) Object 方法的指定行為,而不管實(shí)現(xiàn)程序認(rèn)為它是否合適。
|