JAVA 容器)

來源:互聯網
上載者:User

原文: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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.