2020-04-22day28——Map集合

一绩鸣、上節(jié)課回顧

Collection接口:add()穴豫,remove()凡简,size(),iterator()精肃。秤涩。。

List子接口:add(index,E),remove(index),get(index),set(index,E),subList(),indexOf(),listIterator()...

有序司抱,有下標筐眷,index

允許存儲重復的元素

實現(xiàn)類:

ArrayList:底層采用數(shù)組結構來實現(xiàn)。

LinkedList:底層采用雙向鏈表來實現(xiàn)习柠。

Vector:舊的類匀谣,線程安全,效率低资溃。被ArrayList替代武翎。

Set子接口:

無序

不允許存儲相同的元素——>去重

實現(xiàn)類:

HashSet:底層采用哈希表結構來實現(xiàn)。

step1:對象的hashCode碼溶锭,不相同就直接存儲了宝恶。如果相同,進入第二步

step1:對象的equals()方法。

true:相同對象

false:不同對象

重寫以上兩個方法:Object類:hashCode(),equals()

對象的各個屬性值都相同——>相同的元素卑惜,重復的膏执。

同時重寫hashCode()和equals()

規(guī)則:

hashCode:如果對象相同,保證哈希值必須相同露久。如果對象不同更米,哈希值盡可能不同。

equals:如果對象相同毫痕,必須返回true征峦。如果對象不同,必須返回false消请。

TreeSet:底層采用二叉樹結構來實現(xiàn)栏笆。

TreeSet--->SortedSet接口--->Set接口

去重的同時,還給元素進行排序臊泰。

對象:人類:張三蛉加,王二狗,李小花

對象:狗類:毛毛缸逃,嘯天针饥,豆豆

對象具有可比性:能夠進行比較,誰在前誰在后需频。誰大誰小

接口:比較器

java.lang.Comparable接口:強行對該接口的實現(xiàn)類對象進行比較排序丁眼。

compareTo(o)--->int

o1,o2比較大小

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

負數(shù):this對象<o對象苞七,排前面

零:this對象和o對象相同,不存儲挪丢□宸纾——>去重

java.lang.Comparable接口:比較器

java.util.Comparator接口:比較器

二、本節(jié)課內容

2.1乾蓬、Comparable接口

java.lang.Comparable接口:給對象強行排序的硫眨。默認的比較器。

intcompareTo(To)

將此對象與指定的對象進行比較以進行排序巢块。

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


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

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

負數(shù):this對象<o對象族奢,排前面

零:this對象和o對象相同,不存儲丹鸿≡阶撸——>去重

2.2、Comparator接口

java.util.Comparator接口:給對象強行排序的。自定義的比較器廊敌。

intcompare(To1,To2)

比較其兩個參數(shù)的順序铜跑。

比較的兩個對象:o1和o2

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

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

負數(shù):o1對象<o2對象锅纺,排前面

零:o1對象和o2對象相同,不存儲肋殴《陲保——>去重

注意點:創(chuàng)建一個TreeSet集合,到底使用哪個比較器护锤?Comparable官地?Comparator?

無參構造:new TreeSet();-->使用默認的比較器:Comparable

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

2.3烙懦、LinkedHashSet集合

回憶:HashSet存儲特點驱入?1、無序氯析。2亏较、去重

HashSet存儲數(shù)據(jù),記錄存儲的順序魄鸦。

Set集合的另一個實現(xiàn)類:LinkedHashSet

存儲原理同HashSet相同宴杀,但是外層套了一個鏈表結構。用于記錄存儲的順序拾因。

2.4旺罢、Map接口

詞義:映射,理解為對應绢记。

map每次操作的元素是成對的扁达。兩個:key(鍵),value(值)蠢熄。

map中存儲的元素跪解,鍵值對。其中鍵不能重復签孔。值可以重復叉讥。鍵和值,必須是一一對應的饥追。

成對的:鍵和值對應

程序中图仓,很多數(shù)據(jù)都是成對出現(xiàn)。

? ? json但绕,xml救崔,mysql惶看,map。六孵。纬黎。

Map是一個接口:

Map中的常用方法:

添加/修改元素:

put(key,value);向map中添加鍵值對劫窒,鍵不能重復本今。如果鍵重復了,那么value會被覆蓋的烛亦。

刪除元素:

remove(key)-->value

查詢元素:

containsKey(key)-->boolean

containsValue(value)-->boolean

get(key)-->value

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

?

?

keySet()-->Set<key>

values()-->Collection<value>

entrySet()-->Set<Entry>

2.5诈泼、HashMap實現(xiàn)類

HashSet集合——>如何去重?step1:hashCode()煤禽,step2:equals()

HashMap集合——>key如何去重铐达?原理同HashSet相同。

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

如果哈希值不同檬果,就直接存儲瓮孙。

如果哈希值相同,就進入第二步

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

如果true:相同的元素选脊,key是相同的了杭抠。value值,會覆蓋map中相同的key的之前的value恳啥。

如果false:不同的元素偏灿,key,value都可以進行存儲钝的。

如果使用HashMap集合翁垂,key的對象所屬于的類,必須同時重寫hashCode和equals硝桩,必須同時重寫沿猜。重寫的規(guī)則

hashCode:

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

不同的對象啼肩,有的屬性值不同,那么哈希值盡量不同

equals:

相同的對象衙伶,屬性都相同祈坠,必須返回true。

不同的對象矢劲,屬性值不同颁虐,必須返回false。

對比HashSet和HashMap

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

2、不保證順序

? ? HashSet不關心存儲的元素的順序。添加的順序和迭代的順序不一定一致花嘶。

? ? HashMap不關心key的順序笋籽。

補充一句話:HashSet的底層就是HashMap,只不過只要key椭员,不要value值车海。

2.6、TreeMap實現(xiàn)類

TreeMap要給key去重隘击,而且還要排序:從小到大侍芝。怎么排序?要看排序的規(guī)則

Comparable接口就是默認的排序規(guī)則埋同。

compareTo(o)-->this和o

正數(shù):this > o州叠,排后面

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

零:相同的對象凶赁,這個key對應的value要替換掉原來的value咧栗。

對比TreeSet和TreeMap

1、都要求對象具有可比性虱肄。

? ? TreeSet來講:里面所存儲的元素致板,能夠進行比較大小。

? ? TreeMap來講咏窿,所存儲 key斟或,能夠進行比較大小。

2集嵌、區(qū)別于HashSet和HashMap萝挤,要給排序。從小到大排序纸淮。

? ? Comparable接口:默認的

? ? Comparator接口:自定義

TreeMap也可以指定Comparator接口作為比較器平斩。

compare(o1,o2)-->int

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

負數(shù):o1< o2咽块,排前面

零:相同的對象绘面,這個key對應的value要替換掉原來的value

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市侈沪,隨后出現(xiàn)的幾起案子揭璃,更是在濱河造成了極大的恐慌,老刑警劉巖亭罪,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘦馍,死亡現(xiàn)場離奇詭異,居然都是意外死亡应役,警方通過查閱死者的電腦和手機情组,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門燥筷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人院崇,你說我怎么就攤上這事肆氓。” “怎么了底瓣?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵谢揪,是天一觀的道長。 經常有香客問我捐凭,道長拨扶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任茁肠,我火速辦了婚禮患民,結果婚禮上,老公的妹妹穿的比我還像新娘官套。我一直安慰自己酒奶,他們只是感情好,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布奶赔。 她就那樣靜靜地躺著惋嚎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪站刑。 梳的紋絲不亂的頭發(fā)上另伍,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音绞旅,去河邊找鬼摆尝。 笑死,一個胖子當著我的面吹牛因悲,可吹牛的內容都是我干的堕汞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晃琳,長吁一口氣:“原來是場噩夢啊……” “哼讯检!你這毒婦竟也來了?” 一聲冷哼從身側響起卫旱,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤人灼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后顾翼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體投放,經...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年适贸,在試婚紗的時候發(fā)現(xiàn)自己被綠了灸芳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涝桅。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖耗绿,靈堂內的尸體忽然破棺而出苹支,到底是詐尸還是另有隱情,我是刑警寧澤误阻,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站晴埂,受9級特大地震影響究反,放射性物質發(fā)生泄漏。R本人自食惡果不足惜儒洛,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一精耐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧琅锻,春花似錦卦停、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至处硬,卻和暖如春小槐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荷辕。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工凿跳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疮方。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓控嗜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親骡显。 傳聞我的和親對象是個殘疾皇子疆栏,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內容

  • Java集合類可用于存儲數(shù)量不等的對象,并可以實現(xiàn)常用的數(shù)據(jù)結構如棧,隊列等,Java集合還可以用于保存具有映射關...
    小徐andorid閱讀 1,939評論 0 13
  • 3.3 集合 一方面, 面向對象語言對事物的體現(xiàn)都是以對象的形式蟆盐,為了方便對多個對象的操作承边,就要對對象進行存儲。另...
    閆子揚閱讀 728評論 0 1
  • 集合類框架的介紹: ![Java 集合類框架](https://upload-images.jianshu.io/...
    LynnGuo閱讀 754評論 0 1
  • Comparable接口 java.lang.Comparable接口:給對象強行排序的石挂。默認的比較器博助。 int ...
    硪以忘記伱的一切閱讀 155評論 0 0
  • 一. 巧用"獵犬"計劃,讓顧客成倍增長 1.讓每個人都成為自己的"獵犬",發(fā)展購買自己產品的顧客痹愚,為下一個顧客的推...
    簡單大小閱讀 572評論 0 1