无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網 會員登陸 & 注冊

面試記錄:Map 和 Set 的區(qū)別

2022-09-28 19:48 作者:喜歡安靜の泡面君  | 我要投稿

Map 是字典,Set 是集合

Map

  • 字典是鍵值對保存數據,可以通過 key 進行取值,也可以使用迭代器遍歷內容

  • Map中的Key不允許有重復(確切的講是不允許內容中有equals方法比較后返回true的兩個成員)

  • 實現類有 HashMap、TreeMap

Set

  • Set 可以用迭代器等遍歷內容

  • Set 集合最基本的特征是不允許內容有重復(確切的講是不允許內容中有equals方法比較后返回true的兩個成員)

  • 實現類有 HashSet、LinkedHashSet 、TreeSet

HashMap 和 TreeMap

HashMap

最常用的實現類,底層實現是數組+鏈表+紅黑樹(jdk7中沒有紅黑樹)
這里主要說明jdk8的HashMap
在往 HashMap 中首次 put 元素時(沒有在生命時指明長度),HashMap 會在內部 new 一個長度為16的數組,然后計算 put 元素的hashcode,并將這個值與數組長度進行取余,隨后就會將這個元素放入這個取余的值所對應的數組索引位置。
后續(xù)的 put 操作類似,如果出現了取余后得到的值所在的數組索引位置已經有元素的情況,則會對兩者進行 equals 比較,如果結果為true,則不放入,否則將使用鏈表的結構將內容添加到數組上第一個內容的后面(如果鏈表上也有元素的話也會逐個比較),當鏈表長度大于8時,會將鏈表轉化為紅黑樹。
同時,這個長度為16的數組也會進行擴容,因為使用位運算進行擴容的容量計算,所以數組每次擴容長度都會增加一倍。至于這個數組什么時候會擴容,這里就不寫這么深了。

TreeMap

底層使用紅黑樹實現,數據在插入時會對key自動進行排序構建成紅黑樹,查詢時按照紅黑樹的查詢規(guī)則查詢,紅黑樹就不展開寫了。

HashSet、LinkedHashSet 和 TreeSet

HashSet

底層使用HashMap實現,用HashMap中Key不可重復的特性,因為HashMap中key的存放是無序的(計算哈希值,哈希沖突加鏈表還能造成紅黑樹,肯定無序),所以 HashSet 里的元素也是無序的。

LinkedHashSet

和 HashSet 類似,是 HashSet 的子類,和 HashSet 的區(qū)別在于 LinkedHashSet 會維護一個保存元素插入順序的雙向鏈表,這樣就實現了里面的元素保持插入順序(實際上保存位置仍舊是無序的)

TreeSet

底層使用 TreeMap 實現的 Set。

補充:以上提到的所有實現類都是線程不安全的。


面試記錄:Map 和 Set 的區(qū)別的評論 (共 條)

分享到微博請遵守國家法律
横峰县| 分宜县| 同心县| 马公市| 江华| 金坛市| 凌云县| 定州市| 苏尼特左旗| 英吉沙县| 连云港市| 登封市| 会同县| 即墨市| 临洮县| 融水| 海兴县| 土默特右旗| 全椒县| 南昌县| 定南县| 柘荣县| 赣州市| 普兰县| 皋兰县| 葫芦岛市| 上林县| 德庆县| 宝兴县| 高州市| 蒙阴县| 吉安市| 蕲春县| 勐海县| 日土县| 二连浩特市| 南昌县| 贵南县| 理塘县| 黄梅县| 阿拉善盟|