原文:http://www.cnblogs.com/woodslee/articles/98691.html
1. Collection: 一組各自獨立對象
List: 以特定次序儲存一組元素 [原序]
常用舉例: ArrayList, LinkedList
Set: 元素不得重複 [重排序]
常用舉例: HashSet
最常用介面: add(element)
get()
iterator()
2. Map: key-value paris, 也被稱為關聯式數組(associative array) [重排序]
常用舉例: HashMap
最常用介面: put(key, value)
get()
[容器列印]
由各容器預設的toString()提供
Set和Map都具有內部的排列(Ordering)機制
[容器缺點: 元素型別未定]
一旦將元素放入容器,它將喪失它的型別資訊,都變成了Object
這樣從容器中取出元素時首先要轉換為原有型別,唯有String例外:
編譯器會自動調用toString()函數
[迭代器 Iterators]
迭代器是一個對象,其職責是走訪以及選擇序列(sequence)中的一連串對象
而且迭代器是“輕量級”對象,產生的代價極小
Collention.iterator() 返回一個Iterator對象
java.util.Iterator [class]
next() 取得序列中下一個元素,第一次調用將返回第一個元素
hasNext() 檢查序列中是否還有下一個元素
remove() 移去迭代器最新傳回的元素
對於List還有一個更複雜的ListIterator
java.util.ListIterator [class]
add(), remove(), set(),
hasNext(), next(), nextIndex(),
hasPrevious(), previous(), previousIndex()
舊版迭代器為Enumeration
[容器分類 Container taxonomy]
[Collection機能]
boolean add(Object)* 若未能將引數加入,則返回false
boolean addAll(Collection)* 只要引數Collection中有一個元素成功能加入就返回true
void clear()* 移除(remove)容器內所有元素
boolean contains(Object) 若容器內含引數所代表的對象,返回true
boolean containsAll(Collection) 若容器內含引數所含的所有元素,返回true
boolean isEmpty()
Iterator iterator()
boolean remove(Object)* 若引數值位於容器中,則移出該元素(或其中之一)。若已發生移除動作,則返回true
boolean removeAll(Collection)* 移除容器內所有元素。動作發生返回true
boolean retainAll(Collection)* 只保留引數容器內的元素(交集 intersection)。動作發生返回true
int size() 返回容器中元素個數
Object[] toArray() 返回一個Array,內含容器內所有元素
Object[] toArray(Object[] a) 同上,但Array的中元素型別和引數a的元素型別相同(你仍需自己改變Array的型別)
*optional
[List機能]
List 次序(order)是List最重要的特性;特有的ListIterator(見前述)
ArrayList* 允許快速隨機訪問;安插/移除發生在List中央位置時效率極差
LinkedList 最佳順序逐一查看,易於安插/移除;隨機訪問緩慢,特有機能如下:
addFirst(), addLast(), getFirst(), getLast(), removeFirst(), removeLast()
便於使用LinkedList實現stack, queue, deque
*預設最佳選擇
[Set機能]
Set [interface] Set具有和Collection一模一樣的interface
加進Set的每一元素必須獨一無二——即每個元素必須定義equals()以判斷獨一性
HashSet* 一種把尋找時間看得很重要的Set, 每個元素必須定義hashCode()
TreeSet 底層結構為tree的一種有序(ordered)Set,可從Set中萃取出一個帶次序性的序列(ordered sequence)
*預設最佳選擇
SortedSet [interface] (TreeSet是其唯一實現)
Comparator comparator() 產生一個"被此Set所使用"的Comparator,或者返回null表示以"自然方式"排序。
Object first() 產生lowest element
Object last() 產生highest element
SortedSet subSet(fromElement, toElement) 產生Set子集,範圍從fromElement(含)到toElement(不含)
SortedSet headSet(toElement) 產生Set子集,所有元素都小於toElement
SortedSet tailSet(fromElement) 產生Set子集,所有元素都大於或等於fromElement
first last
[ 0 1 2 3 4 5 6 7 8 ]
low high
開發自己的型別(type)時注意:
1. Set需要以某種方式維護其元素次序,這意味著你必須實現 Comparable interface, 並定義compareTo()
2. 不要在compareTo()中使用簡單明了的比較形式: return i1-i2。
這種寫法是常見的錯誤。因為只有i1和i2都是無符號(unsigned, 但Java中無此關鍵字)的int,這種寫法才是正確的。面對Java中帶加號或減號的int會出錯。原因是帶加號或減號的int,其容量不足以表示兩個同型數值相減的結果。如果i是一個足夠大的正整數,而j是一個絕對值足夠大的負整數,那麼i-j的結果將會造成溢出,並返回負值,導致錯誤。
[Map機能]
Map [interface] 維護key-value的關聯性,使你可以用key來尋找value
HashMap* 基於hash table的實現,可用於取代Hashtable。
在常量時間內安插元素;可通過建構函式,設定capacity, load factor來調整效能。
TreeMap 基於red-black tree的實現。
結果以排序形式出現(次序由Comparable[interface]或者Comparator[class]決定);唯一具有subMap()的一個Map
*預設最佳選擇
Map [interface]
put(Object key, Object value)
get(Object key)
containsKey(Object key)
containsValue(Object value)
SortedMap [interface] (TreeMap是其唯一實現)
Comparator comparator();
Object firstKey();
Object lastKey();
SortedMap subMap(fromKey, toKey);
SortedMap headMap(toKey);
SortedMap tailMap(fromKey);
[容器庫: 公用函數]
Java 2 容器庫: java.util.Collections [class]
(不要和Collection混!)
enumeration(Collection) 產生一箇舊式(Java 1.0/1.1)的Enumeration
max(Collection[, Comparator]) 未指定Comparator時則使用natural comparison
min(Collection[, Comparator])
reverse() 逆序
copy(List dest, List src)
fill(List list, Object o) (只對List有效)替換掉List中原有的元素, 將o的reference複製到List的每個位置上
nCopies(int n, Object o) 返回一個"大小為n, 內容不再變動"的List, 其中所有的reference都指向o
產生唯讀版本:
unmodifiableCollection(Collection c)
unmodifiableList(List l)
unmodifiableSet(Set s)
unmodifiableMap(Map m)
Thinking in Java 補充容器庫: com.bruceeckel.util.Collection2 [class]
fill(Collection, Generator, int) 使用自動產生器generator向容器內加入指定個數元素
除了在 com.bruceeckel.util.Arrays2 中定義的 RandXXXGenerator [class]還能繼續使用外,
(Boolean, Byte, Char, Short, Int, Long, Float, Double, String)
還重新為Map提供了
RandStringPairGenerator [class] 產生指定個數的,隨機字串對(String pairs)
StringPairGenerator [class] 將給定的二維字串數組(2D String Arrays)轉為字串對(String pairs)
預定義產生器對象:
rsp RandStringPairGenerator的對象,產生10組String pairs
geography StringPairGenerator的對象
countries StringGenerator的對象
capitals StringGenerator的對象
[Java 1.0/1.1 舊式容器]
Vector 對應舊式迭代器Enumeration的容器,"函數名稱又長又不好用的ArrayList"
elements() 返回Enumeration
addElement()
Enumeration [interface]
boolean hasMoreElements()
Object nextElement()
Hashtable 類似HashMap
Stack
BitSet