(圖一)
1.面試題:你說說collection裡面有什麼子類。
(其實面試的時候聽到這個問題的時候,你要知道,面試官是想考察List,Set)
正如圖一,list和set是實現了collection介面的。
(圖二)
List:1.可以允許重複的物件。
2.可以插入多個null元素。
3.是一個有序容器,保持了每個元素的插入順序,輸出的順序就是插入的順序。
4.常用的實現類有 ArrayList、LinkedList 和 Vector。ArrayList 最為流行,它提供了使用索引的隨意訪問,而 LinkedList 則對於經常需要從 List 中新增或刪除元素的場合更為合適。
(圖三)
Set:1.不允許重複物件
2. 無序容器,你無法保證每個元素的儲存順序,TreeSet通過 Comparator 或者 Comparable 維護了一個排序順序。
3. 只允許一個 null 元素
4.Set 介面最流行的幾個實現類是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基於 HashMap 實現的 HashSet;TreeSet 還實現了 SortedSet 介面,因此 TreeSet 是一個根據其 compare() 和 compareTo() 的定義進行排序的有序容器。
(圖四)
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我們一起來寫一寫吧。
首先我們要比較物件的哪個屬性呢。年齡?身高?還是體重?剛剛看幫助文件已經知道了,所以下面大家一起來寫一下。
如果大家也是像上圖這種寫法,那麼再想一想有沒有更好的辦法。(我這樣吻是肯定有的,好好看看幫助文件,你就知道了,我知道你只要用心想想,肯定想出來的!)
好了,寫完年齡,不去繼續花幾分鐘把按照身高來排序也寫一下吧。