注意:
泛型:幾乎所有你會以泛型寫的程序都與處理集合有關,泛型的作用讓你寫出有類型安全性的集合。在泛型中,除非與集合有關,否則都是用T,因爲E很清楚的指明是元素。
Set:不能包含重複的元素。SortedSet是一個按照升序排列元素的Set。
List:是一個有序的集合,可以包含重複的元素。提供了按索引訪問的方式。Map:包含了key-value對。Map不能包含重複的key。SortedMap是一個按照升序排列key的Map。
ArrayList:我們可以將其看作是能夠自動增長容量的數組。
利用ArrayList的toArray()返回一個數組。
Arrays.asList()返回一個列表。
迭代器(Iterator) 給我們提供了一種通用的方式來訪問集合中的元素。
排序:Collections.sort()
1自然排尋(natural ordering );
Collections有個sort()方法,public static void sort(List list);
如果List中存儲的爲String類型的數據,則list中的元素會以字母的順序排列。
如果List中存儲的不爲String類型的數據,而是Object,則list中的元素不會按順序排列,當讓Object實現Comparable
2實現比較器(Comparator)接口。
3取最大和最小的元素:Collections.max()、Collections.min()。
4在已排序的List中搜索指定的元素:Collectons.binarySearch()。
LinkedList和Arraylist:
LinkedList對於在中間的插入或刪除會比較快,但對大多數的應用程序而言ArrayList與LinkedList的差異有限,除非元素量真的很大。
ArrayList底層採用數組完成,而LinkedList則是以一般的雙向鏈表(double-linked list)完成,其內每個對象除了數據本身外,還有兩個 引用,分別指向前一個元素和後一個元素。
如果我們經常在List的開始處增加元素,或者在List中進行插入和刪除操作,我們應該使用LinkedList,否則的話,使用ArrayList將更加快速。
HashSet
實現Set接口的hash table(哈希表),依靠HashMap來實現的。
我們應該爲要存放到散列表的各個對象定義hashCode()和equals()。
TreeSet
TreeSet是依靠TreeMap來實現的。
TreeSet是一個有序集合,TreeSet中元素將按照升序排列,缺省是按照自然順序進行排列,意味着TreeSet中元素要實現Comparable接口。
我們可以在構造TreeSet對象時,傳遞實現了Comparator接口的比較器對象。
HashSet和TreeSet的比較
HashSet是基於Hash算法實現的,其性能通常都優於TreeSet。我們通常都應該使用HashSet,在我們需要排序的功能時,我們才使用TreeSet。
HashMap和TreeMap的比較
和Set類似,HashMap的速度通常都比TreeMap快,只有在需要排序的功能的時候,才使用TreeMap。
Java1.0/1.1的集合類
n Vector:用ArrayList代替Vector。
n Hashtable:用HashMap代替Hashtable。
n Satck:用LinkedList代替Stack。
n Properties