本篇要來說說它們的區別!
-
List與Set是用來儲存value、繼承至Collection介面,而Map是擁有key, value鍵值對的介面
-
List介面最大的特點是它有序,可儲存重覆元素,有索引來區別元素。
-
實作List的常見類別有ArrayList, LinkedList,ArrayList的底層資料結構原理是Array陣列,可稱是動態陣列,沒有固定長度,適合用於以索引查詢元素,查詢速度快,但增刪速度慢,因為每增刪一個元素,索引都必須重新排列。
-
而LinkedList的底層資料結構是鏈表,每個元素只會紀錄上一個與下一個元素的記憶體位置,因此增刪速度快,但查詢速度慢,因為必須順著整條鏈一個一個找,直到找到為止。
-
Set介面最大的特點是儲存不重複的元素,並且是無序的。
-
因此Set最好用來檢查某集合是否有重複的元素,可以直接將多個值插入Set集合中,看插入前與插入後的集合長度是否相同。
-
實作Set介面的常見類別有HashSet, TreeSet與LinkedHashSet,不論是哪一個都可確保元素不重覆。
-
HashSet透過HashCode決定元素儲存位置,因此不能確保插入元素的順序,元素可以為null,定位增刪效能較LinkedHashSet佳。
-
TreeSet按自定義排序,但只能儲存相同型態的元素,例如比大小,升序排列,元素不可以為null,因為要排序。
-
LinkedHashSet底層資料結構也是鏈表,插入元素有序,因此遍歷或迭代效能較HashSet佳。
-
Map底層原理與Set相似,key必須唯一。
-
實作Map介面的常見類別有HashMap, TreeMap與LinkedHashMap。
-
HashMap不能確保插入key-value的順序,key-value可以為null,根據key取value,HashMap效能最佳。
-
LinkedHashMap底層資料結構也是鏈表,插入有序的key-value。
-
TreeMap按自定義排序,但只能儲存相同型態的key-value,例如比大小,升序排列,key-value不可以為null,因為要排序。
如有敘述錯誤,還請不吝嗇留言指教,thanks!