(圖一)
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我們一起來寫一寫吧。
首先我們要比較對象的哪個屬性呢。年齡?身高?還是體重?剛剛看幫助文檔已經知道了,所以下面大家一起來寫一下。
如果大家也是像上圖這種寫法,那么再想一想有沒有更好的辦法。(我這樣吻是肯定有的,好好看看幫助文檔,你就知道了,我知道你只要用心想想,肯定想出來的!)