1. 程式人生 > >16. Map、Set、List、Queue、Stack的特點與用法。

16. Map、Set、List、Queue、Stack的特點與用法。

首先依舊要清楚這些集合框架的分支

collection

├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set

└Queue

Map
Hashtable
├HashMap
└WeakHashMap

故此我們來講述這些每個介面的特點和用法

List介面

List是一個有序,容許元素重複且取值為null的序列集合儲存框架。實現List介面的常用類有LinkedList,ArrayList,Vector和Stack。

除了具有Collection介面必備的iterator()方法外,List還提供一個listIterator()方法,返回一個ListIterator介面,和標準的Iterator介面相比,ListIterator多了一些add()之類的方法,允許新增,刪除,設定元素,還能向前或向後遍歷。


Set介面

Set是一個不含重複元素,無序的,且有些實現子類會禁止null元素的無序集合儲存框架。在這個介面下的所有儲存元素,將不會用==操作符來比較兩個物件是否相同,而是使用equals()方法來判斷。

因為Set的這個制約,在使用Set集合的時候,應該注意兩點:1) 為Set集合裡的元素的實現類實現一個有效的equals(Object)方法、2) 對Set的建構函式,傳入的Collection引數不能包

Stack介面

Stack是Vector提供的一個子類,用於模擬"棧"這種資料結構(LIFO後進先出)

Stack遵從後進先出原則。 

Stack繼承自Vector。 

它通過五個操作對類Vector進行擴充套件,允許將向量視為堆疊,它提供了通常的push和pop操作,以及取堆疊頂點的peek()方法、測試堆疊是否為空的empty方法等


Queue介面

     Queue用於模擬"佇列"這種資料結構(先進先出 FIFO)。佇列的頭部儲存著佇列中存放時間最長的元素,佇列的尾部儲存著佇列中存放時間最短的元素。新元素插入(offer)到佇列的尾部,
     訪問元素(poll)操作會返回佇列頭部的元素,佇列不允許隨機訪問佇列中的元素。結合生活中常見的排隊就會很好理解這個概念

Map介面

Map用於儲存具有"對映關係"的資料,因此Map集合裡儲存著兩組值,一組值用於儲存Map裡的key,另外一組值用於儲存Map裡的value。key和value都可以是任何引用型別的資料。Map的key不允許重複,即同一個Map物件的任何兩個key通過equals方法比較結果總是返回false。
關於Map,我們要從程式碼複用的角度去理解,java是先實現了Map,然後通過包裝了一個所有value都為null的Map就實現了Set集合
Map的這些實現類和子介面中key集的儲存形式和Set集合完全相同(即key不能重複)
Map的這些實現類和子介面中value集的儲存形式和List非常類似(即value可以重複、根據索引來查詢)