java中的集合知識雜記

Collection中有三個主要的接口:list,set,map

list是一種知道索引位置的集合,可以有多個元素引用相同的對象

set注重獨一無二的性質,不允許有重複的元素。所謂的重複的元素,hashset會對存入得對象進行對比,先比較他們的hashcode是不是相同的,若hashcode是相同的,就會用equals比較這個對象是不是完全相同,只有當hashcode和元素都相同的時候,hashset纔會認爲這兩個對象是相同的。
也就是說hashcode只是用來縮小找尋成本的,最終是不是相等還是要用equals來確定,這就是對象相等的判斷方法。
根據需要可以自己重寫hashcode和equals方法。

map中的key不能重複,需要用key來取出value,所以key必須唯一。

List的排序
arraylist的排序可以用Collections.sort(Arraylist<String> list);
當arraylist中放的是String類型的時候,可以直接用sort(list)進行排序,根據String中首字母來排序。數字優先,然後是字母依次排序,中文放在最後不做排序
但是arraylist中放的是其他對象的時候,就不能用直接用sort(list)來排序,因爲你的對象中有很多元素,collections不知道根據哪個元素來進行排序。
看一下sort方法的定義
public static <T extends Comparable<? super T>> void sort(List<T> list);
sort方法中的參數T,必須是繼承自Comparable的。這裏的?super T 和? extends T有什麼區別
extends表示的是參數必須是fruit的子類,super表示參數必須是fruit的父類
List<? extends Fruit> flist = new ArrayList<Apple>();
下面這個錯誤,因爲apple不是Fruit的父類
List<? super Fruit> flist = new ArrayList<Apple>();
所以上面這個sort方法中的參數A必須是實現接口Comparable<>,而且Comparable中的參數要是A的父類。然後實現compareTo方法


還可以是用Sort( List<T> list,Comparator<? super T> c)來進行排序

幾種集合的比較
treeset與hashset
hashset可以防止重複的集合,可快速的尋找相符的元素
treeset不僅可以防止重複,而且是以有序的狀態保存數據,treeset是根據對象的compareTo方法參數comparator來進行排序的。
treeset<T>中的類要麼是implements comparable<T> ,要麼加個參數comparator。    new TreeSet<Book>(bookComparator)
如果你沒有想讓數據保持有序的狀態,treeset花費的成本比你想象的要多,因爲你每次插入新項目的時候,都要花費時間找到合適的位置。
arraylist只要把項目放在最後就可以了

linkedlist和arraylist
linkedlist針對經常插入或刪除中間元素設計的高效率集合(實際上還是arraylist比較實用),但是對大多數的應用程序來說,用linkedlist與arraylist差別不大,除非元素量真的很大


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章