国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

歡迎使用CSDN-markdown編輯器

2019-11-10 17:55:26
字體:
來源:轉載
供稿:網友

HashMap和HashSet

將一個Set集合擴展成了Map集合,由于這個Set采用了HashSet作為實現類,HashSet會使用Hash算法來保存集合中每個SimpleEntry元素,因此擴展出來的Map本質上是一個HashMap。 實際上,HashSet和HashMap之間有很多相似之處。

Set和Map的關系

在看Set和Map之間的關系之前,先來看看Set集合的繼承體系,如圖3.1所示。 這里寫圖片描述 再來看Map集合的類繼承體系,如圖3.2所示。 這里寫圖片描述 仔細觀察圖3.2中Map集合的繼承體系里被灰色覆蓋的區域,可以發現,這些Map接口、實現類和Set集合的接 口、實現類的類名完全相似,把Map后綴改為Set后綴即可。Set集合和Map集合的對應關系如下。 ■ Set <-> Map ■ EnumSet <-> EnumMap ■ SortedSet <-> SortedMap ■ TreeSet <-> TreeMap ■ NavigableSet <-> NavigableMap ■ HashSet <-> HashMap ■ LinkedHashSet <-> LinkedHashMap 這些接口和類名如此相似偶然現象,肯定有其必然的原因。

Set< k > keySet() 由此可見,Map集合的所有key將具有Set集合的特征,只要把Map的所有key集中起來看,那它就是一個Set,這實現了從Map到Set的轉換。其實,還可以實現從Set到Map的擴展 對于Map而言,相當于每個元素都是key-value對的Set集合。

對于HashSet而言,系統采用Hash算法決定集合元素的存 儲位置,這樣可以保證快速存、取集合元素;對于HashMap而言,系統將value當成key的附屬,系統裉據Hash算法來決 定key的存儲位置,這樣可以保證快速存、取集合key ,而value總是緊隨key存儲。

在介紹集合存儲之前需要指出一點:雖然集合號稱存儲的是java對象,但實際上并不會真正將Java對象放入Set集 合中,而只是在Set集合中保留這些對象的弓|用而已。也就是說,Java集合實際上是多個引用變量所組成的集合,這些引用 變量指向實際的java對象。 這里寫圖片描述 上面程序先創建2個Apple對象,其中t1指向第1個Apple對象,t2指向第2個Apple對象。此時系統內存的分配如 圖3.6所示。 這里寫圖片描述 接下來,程序創建了一個List集合,并定義了一個list變量指向該List集合。因此,程序創建的實際上是一個初始 長度為4的ArrayList ,也就是說這個List集合的底層長度為4。

提示 ArrayList底層是基于數組實現的,也就是說ArrayList底層封裝的是數組,每次創建ArrayList時傳入的int參數就 i是它所包裝的數組的長度;如果創建ArrayList時沒有傳入int參數,那么ArrayList的初始長度為10 ,也就是它底層所封裝 i的數組的長度為10。

程序創建了一個初始長度為4的ArrayList之后,接著開始嘗i式將Java對象放入ArrayList中。這與把Java對象放入 數組中是完全相同的效果:系統不會真正把Java對象放入ArrayList中,只是向ArrayList集合中存入這些Java對象的引用。 當執行兩條add語句之后,系統內存分配如圖3.7所示。 從圖3.7可以看出,此時t1和list集合的第1個元素指向同一個Java對象,t2和list集合的第2個元素也指向同一個 Java對象,因此程序在①、②兩行代碼處都輸出true。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 固安县| 长顺县| 东宁县| 龙江县| 沐川县| 曲靖市| 澄迈县| 陵川县| 民县| 巍山| 鄂托克前旗| SHOW| 宁海县| 会东县| 恩平市| 江川县| 乳山市| 玉环县| 克什克腾旗| 青冈县| 兴安盟| 弥渡县| 东乡县| 温泉县| 逊克县| 望奎县| 定陶县| 军事| 古丈县| 顺义区| 榆中县| 新巴尔虎右旗| 靖宇县| 民县| 平阳县| 兴义市| 云梦县| 涿鹿县| 白朗县| 岱山县| 郓城县|