天天看點

集合類介紹

結構圖:

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
----------------------------------------------------------------------
Collection接口
          Collection是最基本的集合接口,一個Collection代表一組Object,
         即Collection 的元素(Elements)。一些Collection允許相同的元素
         而另一些不行。一些能排序而另一些不行。

       
Map接口
            請注意,Map沒有繼承Collection接口,Map提供key到value的映射。
          一個Map中不能包含相同的key,每個 key隻能映射一個value。
    Map接口提供3種集合的視圖,Map的内容可以被當作一組key集合,
          一組value集合,或者一組key-value 映射。
------------------------------------------------

list接口和set接口差別:
   list允許有相同元素,而set不允許
Vector與ArrayList差別:
   Vector非常類似ArrayList,但是Vector是同步的。
         由Vector建立的Iterator,雖然和 ArrayList建立的Iterator是同一接口,但是,因為Vector是同步的,
         當一個Iterator被建立而且正在被使用,另一個線程改變了 Vector的狀态(例如,添加或删除了一些元素),
         這時調用Iterator的方法時将抛出 ConcurrentModificationException,是以必須捕獲該異常。
Stack 類:
  Stack繼承自Vector,實作一個後進先出的堆棧。Stack提供5個額外的方法使得Vector得以被當作堆棧使用。
          基本的push和pop方法,還有peek方法得到棧頂的元素,empty方法測試堆棧是否為空,search方法檢測一個元素在堆棧中的位置。
    Stack剛建立後是空棧。
------------------------------------------------
總結
  如果涉及到堆棧,隊列等操作,應該考慮用List,對于需要快速插入,删除元素,應該使用LinkedList,如果需要快速随機通路元素,應該使用ArrayList。
  如果程式在單線程環境中,或者通路僅僅在一個線程中進行,考慮非同步的類,其效率較高,如果多個線程可能同時操作一個類,應該使用同步的類。
  要特别注意對哈希表的操作,作為key的對象要正确複寫equals和hashCode方法。
  盡量傳回接口而非實際的類型,如傳回List而非ArrayList,這樣如果以後需要将ArrayList換成LinkedList時,用戶端代碼不用改變。這就是針對抽象程式設計。