最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

150天打卡Day25_集合深度解析 - Set接口

2021-05-18 11:41 作者:關(guān)阿姨的Java日記  | 我要投稿

Collection子接口之二:Set接口

Set接口沒有提供額外的方法,使用Collection里的方法

Set集合無序不可重復(fù),如果試著把兩個相同的元素加同一個set集合,則操作失敗

Set判斷兩個對象是否相同不用==,用equals()方法

無序性和不可重復(fù)性的理解

無序性

不等于隨機(jī)性,以HashSet為例說明

存儲的數(shù)據(jù)不按照數(shù)組索引的順序挨個添加,而是根據(jù)添加元素的哈希值決定添加在數(shù)組的存儲位置

不可重復(fù)性

保證添加的元素按照equas()方法判斷時,不能返回true,即相同的元素只能添加一個

HashSet,LinkedHashSet,TreeSet異同

相同

均實現(xiàn)了Set接口,擁有Set接口所有的特性

不同

HashSet:是Set接口的主要實現(xiàn)類,線程不安全,可以存儲null值

LinkedHashSet:作為HashSet的子類,由于鏈表的關(guān)系,遍歷其內(nèi)部數(shù)據(jù)時,可以按添加順序去遍歷

TreeSet:底層是紅黑樹,添加時只能添加同一個類new的對象,可以按照添加對象的指定屬性進(jìn)行排序


HashSet源碼分析

HashSet特點介紹

HashSet底層結(jié)構(gòu)是數(shù)組加鏈表,

HashSet元素添加過程

我們向HashSet中添加元素a,首先調(diào)用元素a所在類的hashCode()方法,計算元素a的哈希值,根據(jù)此哈希值通過某種算法計算出在HashSet底層存放的位置,判斷在該位置上是否已經(jīng)有元素

如果該位置上沒有元素,那么元素a添加成功

如果該位置上有其他元素,或以鏈表形式存在的多個元素,則比較元素a與這些元素的哈希值,如果哈希值不相同,以鏈表的形式追加到后面,如果哈希值相同,則還要調(diào)用元素a所在類的equals()方法進(jìn)行判斷,返回true則證明相同,添加失敗,返回false則證明不相同,則以鏈表的形式追加到后面

底層HashSet添加元素其實是添加了HashMap的key,value是定義的一個靜態(tài)常量,沒有實際意義

HashSet底層其實就是HashMap,其他Set實現(xiàn)類同理


LinkedHashSet源碼分析

LinkedHashSet作為HashSet的子類,在添加數(shù)據(jù)的同時,每個數(shù)據(jù)還維護(hù)了兩個引用,記錄此數(shù)據(jù)前一個數(shù)據(jù)和后一個數(shù)據(jù),優(yōu)點,對于頻繁的遍歷操作,優(yōu)于HashSet

TreeSet源碼分析

添加時只能添加同一個類new的對象,可以按照添加對象的指定屬性進(jìn)行排序

兩種排序方式,自然排序和定制排序

自然排序中,TreeSet比較兩個對象是否相同的標(biāo)準(zhǔn)為compareTo()方法返回0,不再是equals()


150天打卡Day25_集合深度解析 - Set接口的評論 (共 條)

分享到微博請遵守國家法律
石城县| 临漳县| 建湖县| 合江县| 万州区| 山西省| 荆门市| 台州市| 乌兰察布市| 蛟河市| 乳山市| 敖汉旗| 宕昌县| 岢岚县| 四川省| 遂平县| 和平县| 开化县| 丽水市| 乡宁县| 都昌县| 汉源县| 祁东县| 承德市| 盱眙县| 南和县| 城步| 炎陵县| 元朗区| 视频| 婺源县| 榕江县| 保定市| 泾源县| 乌拉特中旗| 丹寨县| 同仁县| 玛纳斯县| 二连浩特市| 永济市| 周至县|