(圖一)面試
1.面試題:你說說collection裏面有什麼子類。
(其實面試的時候聽到這個問題的時候,你要知道,面試官是想考察List,Set)
正如圖一,list和set是實現了collection接口的。
(圖二)eclipse
List:1.能夠容許重複的對象。
2.能夠插入多個null元素。
3.是一個有序容器,保持了每一個元素的插入順序,輸出的順序就是插入的順序。
4.經常使用的實現類有 ArrayList、LinkedList 和 Vector。ArrayList 最爲流行,它提供了使用索引的隨意訪問,而 LinkedList 則對於常常須要從 List 中添加或刪除元素的場合更爲合適。
(圖三)spa
Set:1.不容許重複對象
2. 無序容器,你沒法保證每一個元素的存儲順序,TreeSet經過 Comparator 或者 Comparable 維護了一個排序順序。
3. 只容許一個 null 元素
4.Set 接口最流行的幾個實現類是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基於 HashMap 實現的 HashSet;TreeSet 還實現了 SortedSet 接口,所以 TreeSet 是一個根據其 compare() 和 compareTo() 的定義進行排序的有序容器。
(圖四)3d
1.Map不是collection的子接口或者實現類。Map是一個接口。
2.Map 的 每一個 Entry 都持有兩個對象,也就是一個鍵一個值,Map 可能會持有相同的值對象但鍵對象必須是惟一的。
3. TreeMap 也經過 Comparator 或者 Comparable 維護了一個排序順序。
4. Map 裏你能夠擁有隨意個 null 值但最多隻能有一個 null 鍵。
5.Map 接口最流行的幾個實現類是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最經常使用)
2.面試題:什麼場景下使用list,set,map呢?
(或者會問爲何這裏要用list、或者set、map,這裏回答它們的優缺點就能夠了)
答:
-
若是你常常會使用索引來對容器中的元素進行訪問,那麼 List 是你的正確的選擇。若是你已經知道索引了的話,那麼 List 的實現類好比 ArrayList 能夠提供更快速的訪問,若是常常添加刪除元素的,那麼確定要選擇LinkedList。
-
若是你想容器中的元素可以按照它們插入的次序進行有序存儲,那麼仍是 List,由於 List 是一個有序容器,它按照插入順序進行存儲。
-
若是你想保證插入元素的惟一性,也就是你不想有重複值的出現,那麼能夠選擇一個 Set 的實現類,好比 HashSet、LinkedHashSet 或者 TreeSet。全部 Set 的實現類都遵循了統一約束好比惟一性,並且還提供了額外的特性好比 TreeSet 仍是一個 SortedSet,全部存儲於 TreeSet 中的元素可使用 Java 裏的 Comparator 或者 Comparable 進行排序。LinkedHashSet 也按照元素的插入順序對它們進行存儲。
-
若是你以鍵和值的形式進行數據存儲那麼 Map 是你正確的選擇。你能夠根據你的後續須要從 Hashtable、HashMap、TreeMap 中進行選擇。
你們能夠跟着下面的步驟一塊兒嘗試一下。
1.咱們知道了列表要實現排序,須要重寫comparable接口的compareTo的方法。
可是是我不知道comparaTo裏面要怎麼寫呢,它有傳入參數嗎?它有返回值嗎?若是有事什麼類型的呢?ok,下面一塊兒來作一下。先把這個連接的幫助文檔下載下來。下載完以後,打開幫助文檔,
2.看完了幫助文檔是否是內心稍微有點底氣了呢,那如今打開eclipse咱們一塊兒來寫一寫吧。對象
首先咱們要比較對象的哪一個屬性呢。年齡?身高?仍是體重?剛剛看幫助文檔已經知道了,因此下面你們一塊兒來寫一下。blog
若是你們也是像上圖這種寫法,那麼再想想有沒有更好的辦法。(我這樣吻是確定有的,好好看看幫助文檔,你就知道了,我知道你只要用心想一想,確定想出來的!)排序
好了,寫完年齡,不去繼續花幾分鐘把按照身高來排序也寫一下吧。索引