日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

list set map 各自实现类的区别以及它们的底层原理和实现(部分)

發(fā)布時間:2025/3/19 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 list set map 各自实现类的区别以及它们的底层原理和实现(部分) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

List

List是一個不唯一有序的集合。

實現(xiàn)類:

ArrayList:
底層結果是數(shù)組,所以查詢快,增刪慢,線程不安全。
Vector:
底層結果是數(shù)組,查詢快,增刪慢,線程安全。
Linkedlist
底層結果是雙向鏈表,查詢慢,增刪快,線程不安全。

Set

Set是一個唯一無序的集合。

實現(xiàn)類:

HashSet:
hashset其實是hashmap的一個實例,都是一個存放鏈表的數(shù)組,允許有null元素,hashset中的元素都存放在hashmap中的key上面,value是一個固定對象,hashset中的add()方法其實調(diào)用的是底層的hashmap中的put()方法,而如果是在HashMap中調(diào)用put,首先會判斷key是否存在,如果key存在則修改value值,如果key不存在就插入這個key-value。而在set中,因為value值沒有用,也就不存在修改value值的說法,因此往HashSet中添加元素,首先判斷元素(也就是key)是否存在,如果不存在這插入,如果存在就不插入,這樣HashSet中就不存在重復值。總結:無序,唯一,線程不安全,允許null值。
TreeSet:
是一個有序集合,是基于treemap實現(xiàn)的支持兩種排序方式,自然排序和定制排序,treeset是非同步的,線程不安全。
LinkedHashSet:
有序,在迭代訪問set中的元素時,性能比hashset好,但是插入時性能比hashset差。

Map

map是以鍵值對方式存儲數(shù)據(jù)的。

實現(xiàn)類:

HashMap:
底層結構是哈希表,不過在jdk1.8以前,哈希表是由數(shù)組+鏈表合體實現(xiàn)的,在jdk1.8中,哈希表是由數(shù)組+鏈表+紅黑樹合體實現(xiàn)的,當鏈表長度超過閾值(8)時,會自動轉為紅黑樹,這樣就大大的提高了效率,減少了查詢時間。總結:線程不安全,不允許鍵值重復,允許null值和null鍵。
**存儲元素時的流程和原理:**當程序試圖將一個key-value對放入HashMap中時,程序首先根據(jù)該 key的 hashCode() 返回值決定該 Entry 的存儲位置:如果兩個 Entry 的 key 的 hashCode() 返回值相同,那它們的存儲位置相同。如果這兩個 Entry 的 key 通過 equals 比較返回 true,新添加 Entry 的 value 將覆蓋集合中原有 Entry的 value,但key不會覆蓋。如果這兩個 Entry 的 key 通過 equals 比較返回 false,新添加的 Entry 將與集合中原有 Entry 形成 Entry 鏈,而且新添加的 Entry 位于 Entry 鏈的頭部。也就是數(shù)組+鏈表的存儲元素流程。
HashTable:
底層結果與hashmap相同,唯一不同的就是線程安全,鍵和值都不允許為null,提供了對鍵的列舉,
TreeMap:
是一個有序集合,底層是紅黑樹,每個key-value都作為一個紅黑樹的節(jié)點。如果在調(diào)用TreeMap的構造函數(shù)時沒有指定比較器,則根據(jù)key執(zhí)行自然排序。這點會在接下來的代碼中做說明,如果指定了比較器則按照比較器來進行排序。

總結

以上是生活随笔為你收集整理的list set map 各自实现类的区别以及它们的底层原理和实现(部分)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。