Java集合小結

1 集合

Java集合大致分爲SetListMapQueueSet代表無序、不可重複的集合;List爲有序、可重複集合;Map爲有映射關係的集合;Queue代表隊列關係集合。

       集合類主要由兩個接口派生而成:CollectionMap,關係樹如圖1.11.2所示:

 

collection_uml

1.1

 

1.2

有兩種方式遍歷集合元素:Iteratorforeach;但是迭代過程中,集合不能被修改。否則會拋出java.util.ConcurrentModificationException異常。Iterator可以通過iterator.remove()來刪除元素(刪除的是上一個迭代元素)

1.1 Set

Set的特徵:元素不能重複,判斷依據爲equals方法

1.1.1 HashSet/LinkedHashSet

特徵:採用hash算法存取元素,有較好的讀取性能。

HashSet判斷兩個元素相等的依據是兩個對象的hashcodeequals返回值均相等。因此重寫對象的equals方法返回true時,一定要保證它們的hashcode值也相等。

       LinkedHashSet維護了元素的位置信息。迭代訪問時效果佳。

1.1.2 TreeSet

元素是排序的。如果放入的元素是對象,則該對象類需要實現Comparable接口指定排序依據。

注意:元素如果是可變對象,修改元素的屬性將影響集合特性,如元素無法刪除等。所以放入的元素最好是不可變對象。

定製排序:默認TreeSet爲自然排序;通過傳入Comparator改變排序規則:

 

  1. TreeSet ts = new TreeSet(new Comparator(){  
  2.  
  3.        @Override  
  4.  
  5.        public int compare(Object arg0, Object arg1) {  
  6.  
  7.               //compare  
  8.  
  9.        }});  
  10.    
  11.  
  12.  

 

1.1.3 EnumSet

枚舉集合,元素必須來自枚舉類。

1.2 List

判斷元素相同的依據是equals返回值

 

  1. class A {  
  2.  
  3.     public boolean equals(Object o) {  
  4.  
  5.         return true;  
  6.  
  7.     }  
  8.  
  9. }  
  10.    
  11.  
  12.  

 

  1. ArrayList<String> list = new ArrayList<String>();  
  2.  
  3. list.add(“android”);  
  4.  
  5. list.remove(new A());// first element was deleted  
  6.   

結果第一個元素被刪除!

1.2.1 實現類

實現均是基於數組,封裝了可再分配的數組Object[],默認大小10,大數據量時,最好一次性賦予較大容量以提高性能。

void trimToSize(): List的容量調整爲實際使用大小,可節省空間。

Vector線程安全的(現已不推薦使用)

1.3 Queue

1.3.1 LinkedList

實現ListDeque接口,即是一個雙向列表。內部以鏈表實現,增、刪效率高。

1.3.2 PriorityQueue

按元素大小排序的隊列。

1.4 Collection類使用建議

對於經常增加、刪除的操作,採用linkedList效果佳

對於訪問頻繁的,數組類型集合效率高

遍歷集合時,ArrayListVector等數組實現的結構採用隨機訪問get(i)方式效率較高,而LinkedList採用Iterator

1.5 HashMapHashtable

他們的區別類似於ArrayListVector

1.HashMap是非線程安全,而Hashtable是線程安全

2,HashMap可以null作爲keyvaluehashtable反之

如果以對象作爲key,需重寫對象的equalshashcode方法

1.5.1 LinkedHashMap

保持了插入時的順序。

1.5.2 Properties

將屬性文件與map關聯,由於文件的鍵值均爲字符串,因此propertieskeyvalue爲字符串類型。

1.5.3 TreeMap

mapkey是以TreeSet實現的,key相同的判斷依據是equalscompareTo都相同

1.5.4 WeakHashMap

HashMapvalue做成了弱引用

1.5.5 IdentityHashMap

如名字所述,key的要求是必須”==”相同,即要求是同一對象或值

1.6 工具類

Collections中有大量幫助方法,可以分爲排序、查找、同步控制等,例舉比較實用的:

void sort(List list); 排序

int binarySearch(List list,Object obj);查找指定元素的下標,要求list已排序。

synchronizedXXX(XXX xxx); 創建同步集合。XXX可以是ListSetMap

 

 

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