集合詳解(附集合框架圖)

集合框架詳解.png

上圖中橢圓為接口晚树,方形為類
實現(xiàn)為繼承凿滤,虛線為實現(xiàn)

Collection
├List 有序
│├LinkedList
│├ArrayList 常用
│└Vector 線程安全,現(xiàn)在已經(jīng)不用了
└Set 無重復(fù)
│├HashSet: 無序
│├TreeSet :TreeSet類實現(xiàn)了SortedSet接口,有序,
Map
├Hashtable 線程安全梦鉴,不用了
├HashMap 底層是數(shù)組鏈表
└TreeMap 底層是紅黑樹

List,Set,Map 基礎(chǔ)講解

1霸妹、List(有序十电、可重復(fù))
List里存放的對象是有序的,同時也是可以重復(fù)的叹螟,List關(guān)注的是索引鹃骂,擁有一系列和索引相關(guān)的方法,查詢速度快罢绽。因為往list集合里插入或刪除數(shù)據(jù)時畏线,會伴隨著后面數(shù)據(jù)的移動,所有插入刪除數(shù)據(jù)速度慢良价。

ArrayList和LinkedList在用法上沒有區(qū)別寝殴,但是在功能上還是有區(qū)別的。通常來說明垢,LinkedList經(jīng)常用在增刪操作較多而查詢操作很少的情況下蚣常,ArrayList則相反。但是實際上ArrayList更加常用一點痊银,增刪情況下性能差距并不明顯抵蚊。

2、Set(無序溯革、不能重復(fù))
Set里存放的對象是無序贞绳,不能重復(fù)的,集合中的對象不按特定的方式排序鬓照,只是簡單地把對象加入集合中熔酷。

hashSet的底層是由hashMap實現(xiàn),實際是數(shù)組豺裆,其查詢效率非常高拒秘。而且在增加和刪除的時候由于運用的hashCode的比較開確定添加元素的位置号显,所以不存在元素的偏移,所以效率也非常高躺酒。因為hashSet查詢和刪除和增加元素的效率都非常高押蚤。

3、Map(鍵值對羹应、鍵唯一揽碘、值不唯一)
Map集合中存儲的是鍵值對,鍵不能重復(fù)园匹,值可以重復(fù)雳刺。根據(jù)鍵得到值,對map集合遍歷時先得到鍵的set集合裸违,對set集合進行遍歷掖桦,得到相應(yīng)的值。

HashMap
HashMap最多只允許一條記錄的鍵為Null供汛,允許多條記錄的值為Null枪汪,是非同步的
Hashtable
Hashtable與HashMap類似,是HashMap的線程安全版怔昨,雀久,它繼承自Dictionary類,不同的是它不允許記錄的鍵或者值為null趁舀,效率較低赖捌。
LinkedHashMap
LinkedHashMap保存了記錄的插入順序,在用Iteraor遍歷LinkedHashMap時赫编,先得到的記錄肯定是先插入的巡蘸,在遍歷的時候會比HashMap慢奋隶,有HashMap的全部特性擂送。
TreeMap
TreeMap實現(xiàn)SortMap接口抢肛,底層為紅黑樹(平衡的二叉排序樹)求类,能夠把它保存的記錄根據(jù)鍵排序,默認是按鍵值的升序排序(自然順序)萍恕,也可以指定排序的比較器境氢,當(dāng)用Iterator遍歷TreeMap時蟀拷,得到的記錄是排過序的。不允許key值為空萍聊,非同步的问芬;
4、Queue 接口

一些比較

Vector和ArrayList

1寿桨,vector是線程同步的此衅,强戴,而arraylist是線程異步的,是不安全的挡鞍。
2骑歹,vector擴容時為先前長度的2倍,而arraylist 擴容為1.5倍+1墨微;
arraylis有擴容因子 道媚,默認為0.75,初始長度為10
參考 :https://www.zhihu.com/question/31948523

arraylist和linkedlist

1.ArrayList是實現(xiàn)了基于動態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu)翘县,LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu)最域。
2.對于隨機訪問get和set,ArrayList優(yōu)于LinkedList锈麸,因為LinkedList要移動指針羡宙。
3.對于新增和刪除操作add和remove,LinedList比較占優(yōu)勢掐隐,因為ArrayList要移動數(shù)據(jù)狗热。 這一點要看實際情況的。若只對單條數(shù)據(jù)插入或刪除虑省,ArrayList的速度反而優(yōu)于LinkedList匿刮。但若是批量隨機的插入刪除數(shù)據(jù),LinkedList的速度大大優(yōu)于ArrayList. 因為ArrayList每插入一條數(shù)據(jù)探颈,要移動插入點及之后的所有數(shù)據(jù)熟丸。

HashMap與TreeMap

1、 HashMap通過hashcode對其內(nèi)容進行快速查找伪节,而TreeMap中所有的元素都保持著某種固定的順序光羞,如果你需要得到一個有序的結(jié)果你就應(yīng)該使用TreeMap(HashMap中元素的排列順序是不固定的)。
2怀大、在Map 中插入纱兑、刪除和定位元素,HashMap是最好的選擇化借。但如果您要按自然順序或自定義順序遍歷鍵潜慎,那么TreeMap會更好。使用HashMap要求添加的鍵類明確定義了hashCode()和 equals()的實現(xiàn)蓖康。
兩個map中的元素一樣铐炫,但順序不一樣,導(dǎo)致hashCode()不一樣蒜焊。
同樣做測試:
在HashMap中倒信,同樣的值的map,順序不同,equals時泳梆,false;
而在treeMap中鳖悠,同樣的值的map,順序不同,equals時唆迁,true,說明竞穷,treeMap在equals()時是整理了順序了的唐责。

HashTable與HashMap
1、Hashtable是線程安全的瘾带,而HashMap是線程不安全的
2鼠哥、HashMap允許存在一個為null的key,多個為null的value 看政。
3朴恳、hashtable的key和value都不允許為null。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末允蚣,一起剝皮案震驚了整個濱河市于颖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嚷兔,老刑警劉巖森渐,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冒晰,居然都是意外死亡同衣,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門壶运,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耐齐,“玉大人,你說我怎么就攤上這事蒋情〔嚎觯” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵棵癣,是天一觀的道長辕翰。 經(jīng)常有香客問我,道長浙巫,這世上最難降的妖魔是什么金蜀? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任刷后,我火速辦了婚禮的畴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尝胆。我一直安慰自己丧裁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布含衔。 她就那樣靜靜地躺著煎娇,像睡著了一般二庵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缓呛,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天催享,我揣著相機與錄音,去河邊找鬼哟绊。 笑死因妙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的票髓。 我是一名探鬼主播攀涵,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼洽沟!你這毒婦竟也來了以故?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤裆操,失蹤者是張志新(化名)和其女友劉穎怒详,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踪区,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡棘利,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了朽缴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片善玫。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖密强,靈堂內(nèi)的尸體忽然破棺而出茅郎,到底是詐尸還是另有隱情,我是刑警寧澤或渤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布系冗,位于F島的核電站,受9級特大地震影響薪鹦,放射性物質(zhì)發(fā)生泄漏掌敬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一池磁、第九天 我趴在偏房一處隱蔽的房頂上張望奔害。 院中可真熱鬧,春花似錦地熄、人聲如沸华临。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雅潭。三九已至揭厚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扶供,已是汗流浹背筛圆。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留椿浓,地道東北人顽染。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像轰绵,于是被迫代替她去往敵國和親粉寞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

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

  • Collection接口 Collection接口是所有集合的祖先類左腔。他有兩個構(gòu)造方法唧垦,一個無參構(gòu)造,一個是帶Co...
    夜幕繁華閱讀 594評論 0 0
  • 概述 Java集合框架由Java類庫的一系列接口液样、抽象類以及具體實現(xiàn)類組成振亮。我們這里所說的集合就是把一組對象組織到...
    absfree閱讀 1,254評論 0 10
  • 前言 Java中集合大家族的成員實在是太豐富了,有常用的ArrayList鞭莽、HashMap坊秸、HashSet,也有不...
    AndryYu閱讀 1,438評論 0 1
  • 數(shù)據(jù)結(jié)構(gòu)是以某種形式將數(shù)據(jù)組織在一起的集合澎怒,它不僅存儲數(shù)據(jù)褒搔,還支持訪問和處理數(shù)據(jù)的操作。Java提供了幾個能有效地...
    呂侯爺閱讀 1,990評論 0 10
  • 集合類簡介 為什么出現(xiàn)集合類琳状?面向?qū)ο笳Z言對事物的體現(xiàn)都是以對象的形式,所以為了方便對多個對象的操作盒齿,就要對對象進...
    阿敏其人閱讀 1,417評論 0 7