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

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

分享到微博請遵守國家法律
黎川县| 甘孜县| 安阳市| 肥乡县| 昌图县| 德清县| 岳池县| 梓潼县| 内黄县| 大方县| 安仁县| 南江县| 犍为县| 芦山县| 宁陵县| 岳池县| 房产| 万山特区| 罗定市| 勐海县| 许昌县| 渝北区| 肥西县| 同江市| 灯塔市| 曲松县| 临澧县| 安吉县| 辽中县| 江津市| 济源市| 仁怀市| 静安区| 土默特右旗| 平乐县| 华容县| 固始县| 越西县| 西和县| 宝应县| 上栗县|