java集合---Map集合和Comparactor接口

一矾瑰、重點知識

集合中調(diào)用equals(Object obj):比較兩個集合,要想返回true隘擎,需要當(dāng)前集合和形參集合的元素都相同殴穴。而且集合中元素的個數(shù)也要相同。

comparactor最好用匿名內(nèi)部類的方式實現(xiàn)货葬,定制排序推正,想改變或定制排序時候用,不然用自然排序就好了

集合實際使用的是comparable還是comparactor主要看你創(chuàng)建TreeSet集合時用的構(gòu)造器

map中的put方法有返回值宝惰,如果發(fā)生覆蓋行為時(也就是key相同,此時心得value會覆蓋原來的value)返回的為被覆蓋得value值再沧,沒有覆蓋返回的為null

collection顯示時用[ ]包裹數(shù)據(jù)

Map顯示時用{}包裹數(shù)據(jù)

Map中的getkey如果key不存在尼夺,返回的為null

存儲信息的方式:創(chuàng)建多個map每個人的信息存一個Map,然后把所有得map存入list中管理炒瘸,或者寫一個類來存儲信息,把類存儲到Map中淤堵。

注意Map里面發(fā)生key相同時,不是舍棄顷扩,而是覆蓋

TreeMap 實現(xiàn)了sortedMap---->map

二拐邪、重點問題

關(guān)于comparable 和 comparactor兩種比較器的的對比

1、自然排序:使用Comparable接口

像String隘截、包裝類等實現(xiàn)了Comparable接口扎阶,重寫了compareTo(obj)方法,給出了比較兩個對象大小的方式婶芭。進(jìn)行了從小到大的排列

自定義類實現(xiàn)Comparable接口东臀,重寫compareTo(obj)方法。在compareTo(obj)方法中指明如何排序犀农,實現(xiàn)Comparable接口的自定義類就可以往TreeSet惰赋、TreeMap中添加了,他的可排序性是隨著自定義類的存在而存在的呵哨。

重寫compareTo(obj)的規(guī)則:

? ? 如果當(dāng)前對象this大于形參對象obj赁濒,則返回正整數(shù),

? ? 如果當(dāng)前對象this小于形參對象obj孟害,則返回負(fù)整數(shù)拒炎,

? ? 如果當(dāng)前對象this等于形參對象obj,則返回零纹坐。

2枝冀、定制排序:使用Comparator接口

當(dāng)元素的類型沒實現(xiàn)java.lang.Comparable接口而又不方便修改代碼舞丛,或者實現(xiàn)了java.lang.Comparable接口的排序規(guī)則不適合當(dāng)前的操作,那么可以考慮使用 Comparator 的對象來排序

重寫compare(Object o1,Object o2)方法果漾,比較o1和o2的大星蚯小:

如果方法返回正整數(shù),則表示o1大于o2绒障;

如果返回0吨凑,表示相等;

返回負(fù)整數(shù)户辱,表示o1小于o2鸵钝。


總結(jié)

Comparable接口的方式一旦一定,保證Comparable接口實現(xiàn)類的對象在任何位置都可以比較大小庐镐。

Comparator接口屬于臨時性的比較恩商。

在集合TreeSet、TreeMap中Comparator接口也可以用在添加元素類的接口聲明上必逆,但是這樣會顯得比較復(fù)雜怠堪,還是建議寫在元素類用Comparable接口、定制排序就用Comparator接口的匿名內(nèi)部類名眉。
他們創(chuàng)建集合時使用的構(gòu)造方法也不一樣
無參構(gòu)造:new TreeSet();-->使用默認(rèn)的比較器:Comparable
有參構(gòu)造:new TreeSet(Comparator)-->使用自定義的比較器:Comparator

比較器中的理解難點※

TreeSet粟矿、TreeMap里面有排序的方法,而且都是從小到大排序的损拢,需要添加進(jìn)入其中的類實現(xiàn)comparable 和 comparactor是因為陌粹,TreeSet、TreeMap不能進(jìn)行比較福压,需要添加進(jìn)去的元素實現(xiàn)比較的方法掏秩,所以comparable 和 comparactor又叫比較器,然后TreeSet荆姆、TreeMap根據(jù)比較結(jié)果為正數(shù)負(fù)數(shù)或者零來判斷他們的大小哗讥,注意我們平時習(xí)慣寫結(jié)果為1,-1胞枕,0杆煞,但是是別的數(shù)值也可以,TreeSet腐泻、TreeMap在排序時候只看正負(fù)决乎,不看數(shù)值。

三派桩、課堂知識

3.1构诚、Comparable接口

java.lang.Comparable接口:給對象強(qiáng)行排序的。默認(rèn)的比較器铆惑。

int? compareTo(To)

將此對象與指定的對象進(jìn)行比較以進(jìn)行排序范嘱。

比較的兩個對象:this對象和參數(shù)o對象比較

說明:排序的規(guī)則

正數(shù):this對象>o對象送膳,排后面。

負(fù)數(shù):this對象<o對象丑蛤,排前面

零:this對象和o對象相同叠聋,不存儲∈芄——>去重

3.2碌补、Comparator接口

java.util.Comparator接口:給對象強(qiáng)行排序的。自定義的比較器棉饶。

int? compare(To1,To2)

比較其兩個參數(shù)的順序厦章。

比較的兩個對象:o1和o2

說明:排序的規(guī)則

正數(shù):o1對象>o2對象,排后面照藻。

負(fù)數(shù):o1對象<o2對象袜啃,排前面

零:o1對象和o2對象相同,不存儲幸缕∧抑瑁——>去重

注意點:創(chuàng)建一個TreeSet集合,到底使用哪個比較器冀值?Comparable?Comparator宫屠?

無參構(gòu)造:new TreeSet();-->使用默認(rèn)的比較器:Comparable

有參構(gòu)造:new TreeSet(Comparator)-->使用自定義的比較器:Comparator

3.3列疗、LinkedHashSet集合

LinkedHashSet:作為HashSet的子類;遍歷其內(nèi)部數(shù)據(jù)時浪蹂,可以按照添加的順序遍歷

在添加數(shù)據(jù)的同時抵栈,每個數(shù)據(jù)還維護(hù)了兩個引用,記錄此數(shù)據(jù)前一個數(shù)據(jù)和后一個數(shù)據(jù)坤次。? ? ? ? ? ? ? ? ? 對于頻繁的遍歷操作古劲,LinkedHashSet效率高于HashSet.

3.4、Map接口

映射缰猴,類似于函數(shù)

map每次操作的元素是成對的产艾。兩個:key(鍵),value(值)滑绒。

map中存儲的元素闷堡,鍵值對。其中鍵不能重復(fù)疑故。值可以重復(fù)杠览。鍵和值,必須是一一對應(yīng)的纵势。

成對的:鍵和值對應(yīng)

Map是一個接口:

Map中的常用方法:

添加/修改元素:

put(key,value)踱阿;向map中添加鍵值對管钳,鍵不能重復(fù)。如果鍵重復(fù)了软舌,那么value會被覆蓋的才漆。

刪除元素:

remove(key)-->value

查詢元素:

containsKey(key)-->boolean

containsValue(value)-->boolean

獲得元素:

get(key)-->value

size()-->鍵值對的個數(shù)

遍歷的方法調(diào)用:

?keySet()-->Set<key>

values()-->Collection<value>

entrySet()-->Set<Entry>

3.5、HashMap實現(xiàn)類

HashSet集合——>去重? step1:hashCode()葫隙,step2:equals()

HashMap集合——>key去重原理同HashSet相同栽烂。

step1:對象的hashCode()-->哈希值

如果哈希值不同,就直接存儲恋脚。

如果哈希值相同腺办,就進(jìn)入第二步

step2:對象的equals()-->boolean

如果true:相同的元素,key是相同的了糟描。value值怀喉,會覆蓋map中相同的key的之前的value。

如果false:不同的元素船响,key躬拢,value都可以進(jìn)行存儲。

如果使用HashMap集合见间,key的對象所屬于的類聊闯,必須同時重寫hashCode和equals,必須同時重寫米诉。重寫的規(guī)則

hashCode:

相同的對象菱蔬,屬性都相同,那么哈希值必須相同

不同的對象史侣,有的屬性值不同拴泌,那么哈希值盡量不同

equals:

相同的對象,屬性都相同惊橱,必須返回true蚪腐。

不同的對象,屬性值不同税朴,必須返回false回季。

對比HashSet和HashMap

1、都要求同時重寫hashCode()和equals()

2正林、不保證順序

? ? HashSet不關(guān)心存儲的元素的順序茧跋。添加的順序和迭代的順序不一定一致。

? ? HashMap不關(guān)心key的順序卓囚。

HashSet的底層就是HashMap瘾杭,實例化HashMap時等于實例化了一個HashMap.

3.6、TreeMap實現(xiàn)類

TreeMap要給key去重哪亿,而且還要排序:

Comparable接口就是默認(rèn)的排序規(guī)則粥烁。

compareTo(o)-->this和o

正數(shù):this > o贤笆,排后面

負(fù)數(shù):this < o,排前面

零:相同的對象讨阻,這個key對應(yīng)的value要替換掉原來的value芥永。

對比TreeSet和TreeMap

1、都要求對象具有可比性钝吮。

? ? TreeSet來講:里面所存儲的元素埋涧,能夠進(jìn)行比較大小。

? ? TreeMap來講奇瘦,所存儲 key棘催,能夠進(jìn)行比較大小。

2耳标、區(qū)別于HashSet和HashMap醇坝,要給排序。從小到大排序次坡。

? ? Comparable接口:默認(rèn)的

? ? Comparator接口:自定義

TreeMap也可以指定Comparator接口作為比較器呼猪。

compare(o1,o2)-->int

正數(shù):o1 > o2,排后面

負(fù)數(shù):o1< o2砸琅,排前面

零:相同的對象宋距,這個key對應(yīng)的value要替換掉原來的value。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末症脂,一起剝皮案震驚了整個濱河市谚赎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摊腋,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘁傀,死亡現(xiàn)場離奇詭異兴蒸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)细办,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門橙凳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人笑撞,你說我怎么就攤上這事岛啸。” “怎么了茴肥?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵坚踩,是天一觀的道長。 經(jīng)常有香客問我瓤狐,道長瞬铸,這世上最難降的妖魔是什么批幌? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮嗓节,結(jié)果婚禮上荧缘,老公的妹妹穿的比我還像新娘。我一直安慰自己拦宣,他們只是感情好截粗,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸵隧,像睡著了一般绸罗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掰派,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天从诲,我揣著相機(jī)與錄音,去河邊找鬼靡羡。 笑死系洛,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的略步。 我是一名探鬼主播描扯,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼趟薄!你這毒婦竟也來了绽诚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤杭煎,失蹤者是張志新(化名)和其女友劉穎恩够,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羡铲,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蜂桶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了也切。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扑媚。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖雷恃,靈堂內(nèi)的尸體忽然破棺而出疆股,到底是詐尸還是另有隱情,我是刑警寧澤倒槐,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布旬痹,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏唱凯。R本人自食惡果不足惜羡忘,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望磕昼。 院中可真熱鬧卷雕,春花似錦、人聲如沸票从。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峰鄙。三九已至浸间,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吟榴,已是汗流浹背魁蒜。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留吩翻,地道東北人兜看。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像狭瞎,于是被迫代替她去往敵國和親糟需。 傳聞我的和親對象是個殘疾皇子壳澳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

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

  • Java集合類可用于存儲數(shù)量不等的對象,并可以實現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)如棧,隊列等,Java集合還可以用于保存具有映射關(guān)...
    小徐andorid閱讀 1,939評論 0 13
  • 3.3 集合 一方面借宵, 面向?qū)ο笳Z言對事物的體現(xiàn)都是以對象的形式礁遣,為了方便對多個對象的操作,就要對對象進(jìn)行存儲碗殷。另...
    閆子揚閱讀 728評論 0 1
  • 一精绎、上節(jié)課回顧 Collection接口:add(),remove()锌妻,size()代乃,iterator()。从祝。襟己。 ...
  • Java集合框架 Java平臺提供了一個全新的集合框架引谜‰鼓埃“集合框架”主要由一組用來操作對象的接口組成。不同接口描述...
    小石38閱讀 360評論 0 0
  • 最近好多車主會對比汽配城或者網(wǎng)上的價格员咽,咱們能夠爭取的優(yōu)勢就是有質(zhì)保毒涧,拿件速度快,還有贝室,就是可以運用人情優(yōu)勢契讲。
    王佳歡雪閱讀 78評論 0 0