1. 程式人生 > >List Set Map的區別

List Set Map的區別

List和Set是單列結合,它們的父類是Collection,Map是雙列結合,Map用於儲存的是鍵值對,key不允許重複。

List允許重複元素,而Set不允許重複元素。


List以特定次序來持有元素,有先後順序,加入的物件就像排隊一樣,先來後到的順序,有時候也可以插隊,即呼叫add(int index,Obj e)方法,就可以指定當前物件在集合中存放的位置。


Set:存入Set的每個元素都必須是唯一的,因為Set不儲存重複元素。加入Set的元素必須定義equals方法以確保物件的唯一性。Set與Collection有完全一樣的介面。Set介面不保證維護元素的次序;

(最快的)HashSet:為快速查詢而設計的Set。存入HashSet的元素必須定義hashCode();

TressSet:保持次序的Set,底層為樹結構。使用它可以從Set中提取有序的序列。元素必須實現Comparable介面。

LinkHashSet:具有HashSet的查詢速度,且內部使用連結串列圍護元素的順序(插入的次序)。於是在使用迭代器遍歷Set時,結果會按元素插入的次序顯示,元素也必須定義hashCode()方法。


補充點:ArrayList和Vector的區別

答:這兩個類都實現了List介面,他們都是有序集合,Vector是執行緒安全的,而ArrayList是非執行緒安全的,不考慮執行緒安全的話使用ArrayList效率會高些,如果多執行緒訪問到集合則使用Vector。他們都有一個初始的容量大小,當儲存進它們裡面的元素的個數超過了容量時,就需要增加他們的儲存空間,每次增加儲存空間時,不是隻增加一個儲存單元,而是增加多個儲存單元,每次增加的儲存單元的個數在記憶體空間利用與程式效率之間要取得一定的平衡。Vector預設增長為原來的2倍,而ArrayList的增長為原來的1.5倍。他們都可以設定初始空間大小,Vector還可以設定增長的空間大小,而ArrayList沒有提供設定增長空間的方法。

即:Vector增長原來的一倍,ArrayList增加原來的0.5倍