Java常見集合框架(二):Iterable、Collection(List、Set、Queue)、AbstractCollection
1.Iterable<T>
是Collection(List、Set、Queue)的頂級介面,api釋義:實現這個介面允許物件成為 "foreach" 語句的目標。
即可用於迭代。之所以List、Set沒有直接實現Iterator介面,是由於Iterator的迭代(next及hashNext方法)是基於迭代器的當前位置。若直接實現,則當集合類被當做方法引數傳遞時,迭代位置不可知,導致next()方法結果不可知。 單獨實現則可每次都返回從起始位置開始遍歷的迭代器。 List的迭代由AbstractList類實現,Set由具體集合類實現,如HashSet、TreeSet均有,Queue由具體集合類實現,如package java.lang;
import java.util.Iterator;
public abstract interface Iterable<T> {
public abstract Iterator<T> iterator();//返回一個在一組 T 型別的元素上進行迭代的迭代器。
}
package java.util; public abstract interface Iterator<E> { public abstract boolean hasNext(); public abstract E next(); public abstract void remove(); }
2.Collection<E>
public abstract interface Collection<E> extends Iterable<E>:Collection
層次結構中的根介面。Collection 表示一組物件,這些物件也稱為 collection 的元素。一些 collection 允許有重複的元素,而另一些則不允許。一些
collection 是有序的,而另一些則是無序的。JDK 不提供此介面的任何直接 實現:它提供更具體的子介面(如 Set 和 List)實現。此介面通常用來傳遞
collection,並在需要最大普遍性的地方操作這些 collection。
包含對集合元素的add、remove、size、clear、contains、equals、hashCode等方法。
Collections是其幫助類。
3.AbstractCollection<E>
此類提供 Collection 介面的骨幹實現,以最大限度地減少了實現此介面所需的工作。
要實現一個不可修改的 collection,程式設計人員只需擴充套件此類,並提供 iterator 和 size 方法的實現。(iterator 方法返回的迭代器必須實 現 hasNext 和 next。)
要實現可修改的 collection,程式設計人員必須另外重寫此類的 add 方法(否則,會丟擲 UnsupportedOperationException),iterator 方法返回的迭代器還必須另外實現其 remove 方法。
按照 Collection 介面規範中的建議,程式設計人員通常應提供一個 void (無引數),用於建立空 collection和 Collection 構造方法,用於建立一個具有與其引數相同元素新的 collection。
public abstract class AbstractCollection<E> implements Collection<E>{
public boolean add(E paramE) {
throw new UnsupportedOperationException();//不支援的操作,若想修改,子類必須重寫
}
}