Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.
Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作。
Java類庫中用于集合類的基本接口是Collection接口。Collection接口擴展自Iterable接口,因此,可以在任何集合類中使用for each循環。
publicinterface Iterable<T> {
Iterator<T> iterator();
}
publicinterface Collection<E> extends Iterable<E>
Collection和Iterator是泛型接口,任何集合都可以使用其方法。Collection接口中的方法:
public static <E> boolean contains(Collection<E> c, Object obj)
{
for (E element : c)
if (element.equals(obj))
return true;
return false;
}
iterator方法返回一個實現了Iterator接口的對象。
publicinterface Iterator<E> {
boolean hasNext();
E next();
void remove();
}
Java集合類庫將接口與實現分離,Queue
publicabstractclass AbstractCollection<E> implements Collection<E>
一個集合類可以從AbstractCollection類擴展
除了Map結尾的類,其他類都實現了Collection接口。
ArrayList動態數組
ArrayList的內部實現是基于內部數組Object[],所以從概念上講,它更像數組,但LinkedList的內部實現是基于一組連接的記錄,所以,它更像一個鏈表結構。
在ArrayList的前面或中間插入數據時,必須將其后的所有數據相應的后移,這樣必然要花費較多時間,所以,當你的操作是在一列數據的后面添加數據而不是在前面或中間,并且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的性能;
而訪問鏈表中的某個元素時,就必須從鏈表的一端開始沿著連接方向一個一個元素地去查找,直到找到所需的元素為止,所以,當你的操作是在一列數據的前面或中間添加或刪除數據,并且按照順序訪問其中的元素時,就應該使用LinkedList了。
如果在編程中,兩種情形交替出現,這時,可以考慮使用List這樣的通用接口,而不用關心具體的實現,在具體的情形下,它的性能由具體的實現來保證。
Java中每個鏈表實際上是雙重鏈表。鏈表是有序的。List接口和實現了該接口的LinkedList類。
interface ListIterator<E> extends Iterator<E>
ListIterator中的add方法,添加元素在迭代器之前,remove方法刪除上一個被訪問的元素。Set方法取代使用next或previous方法最后訪問的元素。
ArrayList封裝了一個動態重新分配的數組。
Vector類的所有方法都是同步的。可以用兩個線程安全地訪問Vector對象。代碼會在同步操作上浪費相當多的時間。ArrayList類的方法不是同步的。
hashCode()方法必須和equals方法相兼容。如果a.equals(b)為ture,則a和b必有相同的散列碼。散列嗎是通過對象實例字段產生的整數。
TreeSet是一個有序集合,插入時可以是任意順序,輸出時為排序后的順序。紅黑樹。默認情況下,TreeSet假設你插入的元素實現了Comparable接口。
publicinterface Comparable<T> {
publicint compareTo(T o);
}
PriorityQueue是一種能夠在以任意順序插入元素后,再按排序順序讀取這些元素的數據結構。優先級隊列和TreeSet一樣,其所持有的元素可以是實現了Comparable接口的類的對象,也可以是在構造器中提供的Comparator對象。
HashMap和TreeMap都實現了Map接口,映射表用于存放鍵/值對。
HashSet類,實現了基于散列表的散列集。不存在重復元素的集合。
散列映射表用于對鍵進行散列,樹狀映射表對于鍵的全局順序進行排序,并組成搜索樹。
框架就是一個類集合,它形成了創建高級功能的基礎。框架包含許多超類,這些超類擁有非常有用的功能、策略和機制。框架用戶建立的子類可以擴展類的功能,而不是重新創建基本的機制。
兩個用于集合的基本接口,Collection和Map。
Set接口和Collection接口,Set不允許有重復元素。List接口提供隨機訪問的方法,ArrayList和LiknkedList的訪問算法效率是不同的。