Set接口

## HashSet

? ? 1. 添加元素的時候,每一次都會調(diào)用hashCode方法

? ? 2. 重寫equals方法和HashCode方法,也是首先調(diào)用hashCode方法,再來調(diào)用equals方法

? ? HashSet存儲原理:【背下來!??!】

? ? 向HashSet集合中添加元素,HashSet首先會調(diào)用該元素hashCode方法,獲取該對象的Hash值

? ? 通過【移位】運算,計算出,該元素應(yīng)該保存在【哈希表】中哪一個位置

? ? 情況1:

? ? 該位置沒有任何元素,直接放入

? ? 情況2:

? ? 該位置存在其他元素,哈希表就會調(diào)用該元素的equals方法,和已經(jīng)保存在哈希表里面的元素進行

? ? 比較

? ? 如果比較結(jié)果為true 表示相同元素,無法添加

? ? 如果比較結(jié)果為false,表示為不同元素,可以添加


? ? 哈希表的每一個單元格都是一個桶式結(jié)構(gòu),可以保存多個元素,允許元素共存?。?!

##? TreeSet

? ? TreeSet是一個樹形結(jié)構(gòu)的Set結(jié)構(gòu)

發(fā)現(xiàn):

TreeSet中添加元素原本是字符串類型,當(dāng)添加自定義對象,或者數(shù)字的時候,報異常!??!

ClassCastException

原因:

因為TreeSet是一個樹形結(jié)構(gòu),所有的元素都需要進行比較之后才可以放入到Set集合中,而

字符串和自定義類對象是沒有比較的方式和方法的

【要求】在TreeSet里面的所有的元素都要有【比較的方式】或者有【自然順序】

TreeSet添加自定義元素的方式:

方式1:

讓這個自定義類【遵從】Comparable接口,實現(xiàn)compareTo方法

方式2:

自定義比較器,這個比較器是【遵從】Comparator接口,實現(xiàn)

int compare(Object o1, Object o2)

可以在創(chuàng)建TreeSet對象的時候,傳入比較器對象作為比較方式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容