Collection 接口的接口 對象的集合
├ List 子接口 按進入先后有序保存 可重復
│├ LinkedList 接口實現類 鏈表 插入刪除 沒有同步 線程不安全
│├ ArrayList 接口實現類 數組 隨機訪問 沒有同步 線程不安全
│└ Vector 接口實現類 數組 同步 線程安全
│ └ Stack
└ Set 子接口 僅接收一次,並做內部排序
├ HashSet
│ └ LinkedHashSet
└ TreeSet
對於 List ,關心的是順序, 它保證維護元素特定的順序(允許有相同元素),使用此接口能夠精確的控制每個元素插入的位置。用戶能夠使用索引(元素在 List 中的位置,類似於數組下標)來訪問 List 中的元素。
對於 Set ,只關心某元素是否屬於 Set (不 允許有相同元素 ),而不關心它的順序。
Map 接口 鍵值對的集合
├ Hashtable 接口實現類 同步 線程安全
├ HashMap 接口實現類 沒有同步 線程不安全
│├ LinkedHashMap
│└ WeakHashMap
├ TreeMap
└ IdentifyHashMap
對於 Map ,最大的特點是鍵值映射,且為一一映射,鍵不能重復,值可以,所以是用鍵來索引值。 方法 put(Object key, Object value) 添加一個“值” ( 想要得東西 ) 和與“值”相關聯的“鍵” (key) ( 使用它來查找 ) 。方法 get(Object key) 返回與給定“鍵”相關聯的“值”。
Map 同樣對每個元素保存一份,但這是基於 " 鍵 " 的, Map 也有內置的排序,因而不關心元素添加的順序。如果添加元素的順序對你很重要,應該使用 LinkedHashSet 或者 LinkedHashMap.
對於效率, Map 由於采用了哈希散列,查找元素時明顯比 ArrayList 快。
更為精煉的總結:
Collection 是對象集合, Collection 有兩個子接口 List 和 Set
List 可以通過下標 (1,2..) 來取得值,值可以重復
而 Set 只能通過游標來取值,並且值是不能重復的
ArrayList , Vector , LinkedList 是 List 的實現類
ArrayList 是線程不安全的, Vector 是線程安全的,這兩個類底層都是由數組實現的
LinkedList 是線程不安全的,底層是由鏈表實現的
Map 是鍵值對集合
HashTable 和 HashMap 是 Map 的實現類
HashTable 是線程安全的,不能存儲 null 值
HashMap 不是線程安全的,可以存儲 null 值
Stack類:繼承自Vector,實現一個后進先出的棧。提供了幾個基本方法,push、pop、peak、empty、search等。
Queue接口:提供了幾個基本方法,offer、poll、peek等。已知實現類有LinkedList、PriorityQueue等。