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


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等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM