国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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接口的評論 (共 條)

分享到微博請遵守國家法律
潞西市| 蓝田县| 鲁甸县| 德江县| 曲周县| 天气| 年辖:市辖区| 明溪县| 松滋市| 太原市| 阿城市| 阿拉善盟| 马龙县| 洛南县| 西青区| 壶关县| 阿拉善右旗| 色达县| 准格尔旗| 苍山县| 汉沽区| 红安县| 万山特区| 永安市| 剑河县| 宝应县| 克东县| 宜兰市| 兴隆县| 墨江| 肇东市| 芮城县| 南宫市| 察隅县| 新津县| 宜都市| 新密市| 巢湖市| 呈贡县| 乌恰县| 林甸县|