就是愛分享


程式設計師撰寫程式時會在陣列中存放一大群數值資料或物件,但陣列的長度是預先給定且無法變更的,所以在執行時期程式卻無法變動陣列長度以動態產生所需要的物件。

針對這類的問題,java.util套件提供了各種classes(The Collection API)讓程式開發者使用,如今程式設計師不再為動態資料存取而煩惱,只要會使用這些功能強大的classes即可。

被置入集合的物件,其原本的資料型別將不存在,而是以Object的型態存入集合中。不過,當不同資料型別的物件置入同一個集合,日後再取出時,必須先將此元素轉換成原始(放入集合前)的資料型別,否則將會出現執行時期錯誤(runtime error)。

集合(Collection)
1. 集合(Collection)
集合(Collection)是描繪或存放一群物件(a group of objects)的觀念,又可稱之為物件群組,物件群組中的物件便是集合中所謂的集合元素(collection element)。



2. 列舉(Enumeration)
實作Enumeration介面可將指定集合物件中所有元素序列化,並透過nextElement()方法逐次存取元素內容值。Enumeration適用在Collection、Hashtable與Voctor集合等集合物件中。

3. 迭代器(Iterator)
Iterator定位在Collection介面上,只要是Collection就會有Iterator,也就是所有的Collection都會產生Iterator。Iterator除了可以存取集合內的元素資料,利用remove()方法亦可移除Iterator中最新(即最近增加)的元素。

4. ListIterator
在宣告上,ListIterator介面是繼承Iterator介面。ListIterator可幫助開發人員直接對指定的集合元素做新增、修改與刪除的動作,並取得目前元素在list集合中的位置(iterator's current position in the list),同時可上下移動的讀取集合中元素的內容,而Enumeration與Iterator只能往下讀取下一個集合元素資料。

在ListIterator集合中每一個元素之間都有一個cursor position(Index),使ListIterator可以利用Index值來取得下一個元素(next()方法)與上一個元素(previous()方法),如圖所示:



若指定元素不存在,系統將傳回UnsupportedOperationException例外,而每一個元素的前後都會有一個Index。

Set介面
Set介面實作了Collection介面,因此也包含了Collection中所有的方法。Set中所放置的元素是無順序性的(unordered),並且元素與元素之間不得重複(no duplicates)。Set的擺放位置是根據hashCode而決定,不允許擺放相同的資料,所以我們可以說Set是資料具唯一性但無順序性的集合。



SortedSet interface
由於SortedSet繼承了Set,因此SortedSet中也會包含在Set類別所定義的方法。利用SortedSet可以將儲存在Set中的元素內容做自然排序(遞增),不過各元素的內容是不可以重複的。SortedSet集合中的每一個元素都必須實作Comparable介面,所以只要在SortedSet物件中加入一個新的元素則SortedSet就會起自動去比較該元素內容是否已出現在原有的SortedSet集合中。

List介面
List實作了Collection介面,並包含了Collectin中所有的方法。List中的元素有順序性且資料可以重複(duplicates are permitted),此外也可以利用List介面,插入或移除指定的集合元素。



Map介面
Map並沒有繼承集合介面(Collection Interface),它被歸類為集合架構(Collection architecture)的一部份是因Hashtable與HashMap這二個集合類別分別都實作了Map介面,廣義來說Map便成了集合架構中的一環。

Map中利用指定的鍵值(key)來決定元素擺放位置,鍵值不得重複,每一個鍵值最多只能對應一個元素,雖鍵值不得重複,不同的鍵值卻允許儲存重複的物件。


標籤: | edit post
0 Responses