List、Set、Map的区别
生活随笔
收集整理的這篇文章主要介紹了
List、Set、Map的区别
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
轉(zhuǎn)自https://www.cnblogs.com/IvesHe/p/6108933.html
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(圖一)
1.面試題:你說(shuō)說(shuō)collection里面有什么子類。
(其實(shí)面試的時(shí)候聽(tīng)到這個(gè)問(wèn)題的時(shí)候,你要知道,面試官是想考察List,Set)
正如圖一,list和set是實(shí)現(xiàn)了collection接口的。
?
(圖二)
List:1.可以允許重復(fù)的對(duì)象。
?2.可以插入多個(gè)null元素。
? ? ? ? 3.是一個(gè)有序容器,保持了每個(gè)元素的插入順序,輸出的順序就是插入的順序。
? ? ? ? 4.常用的實(shí)現(xiàn)類有?ArrayList、LinkedList 和 Vector。ArrayList 最為流行,它提供了使用索引的隨意訪問(wèn),而 LinkedList 則對(duì)于經(jīng)常需要從 List 中添加或刪除元素的場(chǎng)合更為合適。
?
?(圖三)
?Set:1.不允許重復(fù)對(duì)象
? 2. 無(wú)序容器,你無(wú)法保證每個(gè)元素的存儲(chǔ)順序,TreeSet通過(guò) Comparator ?或者 Comparable 維護(hù)了一個(gè)排序順序。
? ? ? ? 3.?只允許一個(gè) null 元素
? ? ? ? 4.Set 接口最流行的幾個(gè)實(shí)現(xiàn)類是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 實(shí)現(xiàn)的 HashSet;TreeSet 還實(shí)現(xiàn)了 SortedSet 接口,因此 TreeSet 是一個(gè)根據(jù)其 compare() 和 compareTo() 的定義進(jìn)行排序的有序容器。
?
(圖四)
1.Map不是collection的子接口或者實(shí)現(xiàn)類。Map是一個(gè)接口。
2.Map 的 每個(gè) Entry 都持有兩個(gè)對(duì)象,也就是一個(gè)鍵一個(gè)值,Map 可能會(huì)持有相同的值對(duì)象但鍵對(duì)象必須是唯一的。
3.?TreeMap 也通過(guò) Comparator ?或者 Comparable 維護(hù)了一個(gè)排序順序。
4.?Map 里你可以擁有隨意個(gè) null 值但最多只能有一個(gè) null 鍵。
5.Map 接口最流行的幾個(gè)實(shí)現(xiàn)類是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)
?
?
2.面試題:什么場(chǎng)景下使用list,set,map呢?
(或者會(huì)問(wèn)為什么這里要用list、或者set、map,這里回答它們的優(yōu)缺點(diǎn)就可以了)
答:
如果你經(jīng)常會(huì)使用索引來(lái)對(duì)容器中的元素進(jìn)行訪問(wèn),那么 List 是你的正確的選擇。如果你已經(jīng)知道索引了的話,那么 List 的實(shí)現(xiàn)類比如 ArrayList 可以提供更快速的訪問(wèn),如果經(jīng)常添加刪除元素的,那么肯定要選擇LinkedList。
如果你想容器中的元素能夠按照它們插入的次序進(jìn)行有序存儲(chǔ),那么還是 List,因?yàn)?List 是一個(gè)有序容器,它按照插入順序進(jìn)行存儲(chǔ)。
如果你想保證插入元素的唯一性,也就是你不想有重復(fù)值的出現(xiàn),那么可以選擇一個(gè) Set 的實(shí)現(xiàn)類,比如 HashSet、LinkedHashSet 或者 TreeSet。所有 Set 的實(shí)現(xiàn)類都遵循了統(tǒng)一約束比如唯一性,而且還提供了額外的特性比如 TreeSet 還是一個(gè) SortedSet,所有存儲(chǔ)于 TreeSet 中的元素可以使用 Java 里的 Comparator 或者 Comparable 進(jìn)行排序。LinkedHashSet 也按照元素的插入順序?qū)λ鼈冞M(jìn)行存儲(chǔ)。
如果你以鍵和值的形式進(jìn)行數(shù)據(jù)存儲(chǔ)那么 Map 是你正確的選擇。你可以根據(jù)你的后續(xù)需要從 Hashtable、HashMap、TreeMap 中進(jìn)行選擇。
大家可以跟著下面的步驟一起嘗試一下。
1.我們知道了列表要實(shí)現(xiàn)排序,需要重寫(xiě)comparable接口的compareTo的方法。
但是是我不知道comparaTo里面要怎么寫(xiě)呢,它有傳入?yún)?shù)嗎?它有返回值嗎?如果有事什么類型的呢?ok,下面一起來(lái)做一下。先把這個(gè)鏈接的幫助文檔下載下來(lái)。下載完之后,打開(kāi)幫助文檔,
?
?
2.看完了幫助文檔是不是心里稍微有點(diǎn)底氣了呢,那現(xiàn)在打開(kāi)eclipse我們一起來(lái)寫(xiě)一寫(xiě)吧。
首先我們要比較對(duì)象的哪個(gè)屬性呢。年齡?身高?還是體重?剛剛看幫助文檔已經(jīng)知道了,所以下面大家一起來(lái)寫(xiě)一下。
?如果大家也是像上圖這種寫(xiě)法,那么再想一想有沒(méi)有更好的辦法。(我這樣吻是肯定有的,好好看看幫助文檔,你就知道了,我知道你只要用心想想,肯定想出來(lái)的!)
好了,寫(xiě)完年齡,不去繼續(xù)花幾分鐘把按照身高來(lái)排序也寫(xiě)一下吧。
轉(zhuǎn)載于:https://www.cnblogs.com/fangqideagan/p/9168238.html
總結(jié)
以上是生活随笔為你收集整理的List、Set、Map的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 校招准备-科研
- 下一篇: IDEA mybatis-generat