JAVA入門小小白學(xué)習(xí)中ing(HashSet集合、TreeSet集合)

小豬學(xué)習(xí)

小小白慢慢學(xué)習(xí)中ing 第二十五天

努力努力


本日內(nèi)容(HashSet集合容劳、TreeSet集合)


1辉词、Set集合

Set詞義:數(shù)學(xué)中集合的概念必孤。也是Collection的子接口。

Set作為Collection集合的子接口瑞躺,沒(méi)有新增的功能敷搪。但是有自己的存儲(chǔ)特點(diǎn)。

無(wú)序幢哨。

不允許存儲(chǔ)重復(fù)的元素赡勘。

2、HashSet集合

Set接口的一個(gè)具體的實(shí)現(xiàn)類捞镰。

????底層是由哈希表實(shí)現(xiàn)闸与。它不保證迭代的順序。特別是不保證順序一直不變曼振。

????真正判斷元素是否是重復(fù),是否是相同的:看equals()蔚龙。

Object類:equals()-->boolean冰评,判斷對(duì)象是否相等。

子類是否重寫:

String木羹,Integer甲雅,Date,坑填。抛人。。脐瑰。

重點(diǎn)重點(diǎn)重點(diǎn)Q丁!苍在!HashSet集合去重的流程:

step1:先獲取對(duì)象的hashCode绝页,對(duì)象的哈希值不同,直接存儲(chǔ)到HashSet容器中寂恬。

step2:如果哈希值相同续誉,調(diào)用equals()比較。

true:認(rèn)為是相同的元素初肉,不存儲(chǔ)

false:不同的元素酷鸦,存儲(chǔ)

原則:hashCode()和equals()的原則:

重寫hashCode()的規(guī)則:自己生成hashCode值。公式

????????對(duì)象相同:屬性值相同。那么哈希碼必須相同臼隔。

????????對(duì)象不同:屬性值不同嘹裂。哈希碼盡量不同。

????????哈希碼可能相同躬翁,也可能不同焦蘑,但是我們希望不同。

重寫equals()的原則:"權(quán)威的"

????????如果兩個(gè)對(duì)象的屬性值相同盒发,認(rèn)為是相同的對(duì)象例嘱,返回true。

????????如果兩個(gè)對(duì)象的屬性值有不同宁舰,就不是相同的對(duì)象拼卵,返回false。

結(jié)論:如果想使用HashSet集合蛮艰,那么必須同時(shí)重寫對(duì)象的hashCode()和equals()這兩個(gè)方法腋腮。

重寫的規(guī)則:

hashCode()

????????對(duì)象相同,屬性值相同壤蚜。哈希碼必須相同即寡。

????????對(duì)象不同,屬性值不同袜刷。哈希碼盡量不同聪富。

equals()

????????對(duì)象相同:屬性值相同。必須true著蟹。

????????對(duì)象不同:屬性值不同墩蔓。必須false。

底層是一個(gè)哈希表:

????????酒店:HashSet集合

????????????顧客1:元素

????????房間號(hào):哈希值--->進(jìn)房間萧豆,1003

????????????顧客2:元素

????????房間號(hào):哈希值--->進(jìn)房間奸披,1004

????????????顧客3:元素

????????房間號(hào):哈希值-->1005

判斷:顧客2和顧客3是否是同一個(gè)人

看equals-->好比身份證號(hào)

3、TreeSet集合

TreeSet作為Set的一個(gè)實(shí)現(xiàn)類涮雷,也要去除重復(fù)的元素阵面。可以給存儲(chǔ)的元素進(jìn)行整理排序洪鸭。

????????排序:就要有排序的規(guī)則膜钓。

????????默認(rèn)的規(guī)則:Comparable接口,定義排序的規(guī)則卿嘲。

要想把元素存入到TreeSet集合中颂斜。就要求元素所屬的類,必須實(shí)現(xiàn)Comparable接口拾枣。

interface Comparable{

????????int compareTo(T obj);//排序的規(guī)則

}

String沃疮,Integer盒让,。司蔬。邑茄。。

java.lang.Comparable接口的用途:強(qiáng)行對(duì)實(shí)現(xiàn)類的對(duì)象進(jìn)行排序俊啼。

????????compareTo()-->此方法用于排序肺缕,返回值int類型類型

????????o1.compareTo(o2)-->int

????????正數(shù):o1 > o2,將o1排在o2的后面授帕。

????????負(fù)數(shù):o1 < o2同木,將o1排在o2的前面。

????????零:認(rèn)為o1和o2相同跛十,不存儲(chǔ)了彤路。

示例代碼:

Set<Person> set = new TreeSet<>();

Person p1 = new Person("王二狗", 19);

Person p2 = new Person("李小花", 18);

Person p3 = new Person("王二狗", 19);

Person p4 = new Person("李小花", 18);

Person p5 = new Person("Rose", 20);

/*

* java.lang.ClassCastException: com.qf.demo02.Person cannot be cast to java.lang.Comparable

* 直接向treeSet集合中存儲(chǔ)元素,報(bào)錯(cuò)了

*/

set.add(p1);

set.add(p2);

set.add(p3);

set.add(p4);

set.add(p5);

System.out.println(set.size());

System.out.println(set);

?

java.lang.ClassCastException: com.qf.demo02.Person cannot be cast to java.lang.Comparable

直接向treeSet集合中存儲(chǔ)元素芥映,報(bào)錯(cuò)了洲尊。Person類,不能轉(zhuǎn)為Comparable對(duì)象

?

java.lang.Comparable:查API

經(jīng)由查詢之后奈偏,發(fā)現(xiàn):

Comparable是一個(gè)接口:該接口對(duì)實(shí)現(xiàn)它的每個(gè)類的對(duì)象強(qiáng)加一個(gè)整體排序坞嘀。 這個(gè)排序被稱為類的自然排序 ,類的compareTo方法被稱為其自然比較方法 惊来。

?

該接口中有一個(gè)唯一的方法:compareTo(T)-->int

擴(kuò)展內(nèi)容:

紅黑樹(shù)--->平衡二叉樹(shù)--->二叉樹(shù)--->樹(shù)

想了解平衡二叉樹(shù)丽涩,可以參照此網(wǎng)址:https://baijiahao.baidu.com/s?id=1651427207567199156&wfr=spider&for=pc

4、Comparable接口

java.lang.Comparable接口

java.lang.Comparable接口的用途:強(qiáng)行對(duì)實(shí)現(xiàn)類的對(duì)象進(jìn)行排序唁盏。

僅有唯一的一個(gè)方法:compareTo()-->此方法用于排序内狸,返回值int類型類型

o1.compareTo(o2)-->int

????????正數(shù):o1 > o2检眯,將o1排在o2的后面厘擂。

????????負(fù)數(shù):o1 < o2,將o1排在o2的前面锰瘸。

????????零:認(rèn)為o1和o2相同刽严,不存儲(chǔ)了。

默認(rèn)的TreeSet集合避凝,使用的是Comparable接口舞萄,來(lái)給對(duì)象進(jìn)行排序。以及去重管削。



希望我能堅(jiān)持住每天堅(jiān)持記錄著 ...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末倒脓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子含思,更是在濱河造成了極大的恐慌崎弃,老刑警劉巖甘晤,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異饲做,居然都是意外死亡线婚,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門盆均,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)塞弊,“玉大人,你說(shuō)我怎么就攤上這事泪姨∮窝兀” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵驴娃,是天一觀的道長(zhǎng)奏候。 經(jīng)常有香客問(wèn)我,道長(zhǎng)唇敞,這世上最難降的妖魔是什么蔗草? 我笑而不...
    開(kāi)封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮疆柔,結(jié)果婚禮上咒精,老公的妹妹穿的比我還像新娘。我一直安慰自己旷档,他們只是感情好模叙,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著鞋屈,像睡著了一般范咨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厂庇,一...
    開(kāi)封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天渠啊,我揣著相機(jī)與錄音,去河邊找鬼权旷。 笑死替蛉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拄氯。 我是一名探鬼主播躲查,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼译柏!你這毒婦竟也來(lái)了镣煮?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鄙麦,失蹤者是張志新(化名)和其女友劉穎典唇,沒(méi)想到半個(gè)月后邮弹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚓聘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年腌乡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夜牡。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡与纽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出塘装,到底是詐尸還是另有隱情急迂,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布蹦肴,位于F島的核電站僚碎,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏阴幌。R本人自食惡果不足惜勺阐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矛双。 院中可真熱鬧渊抽,春花似錦、人聲如沸议忽。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)栈幸。三九已至愤估,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間速址,已是汗流浹背玩焰。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壳繁,地道東北人震捣。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓荔棉,卻偏偏與公主長(zhǎng)得像闹炉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子润樱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容