五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

分享到微博請遵守國家法律
阿拉善右旗| 靖宇县| 泰州市| 郑州市| 大埔县| 阜康市| 金湖县| 塔城市| 忻城县| 临洮县| 安新县| 富源县| 朔州市| 泗洪县| 平远县| 中牟县| 彭山县| 思茅市| 红桥区| 桂林市| 大邑县| 灌南县| 密山市| 凤冈县| 阜宁县| 盐津县| 古交市| 丹棱县| 双辽市| 定兴县| 沂南县| 平塘县| 历史| 安庆市| 景宁| 屏东市| 五原县| 茌平县| 扎赉特旗| 通城县| 徐闻县|