(3)Java集合篇

1.List,Set,Map三者的區(qū)別及總結(jié)

List:對(duì)付順序的好幫手

List接口存儲(chǔ)一組不唯一(可以有多個(gè)元素引用相同的對(duì)象)黍衙,有序的對(duì)象

Set:注重獨(dú)一無二的性質(zhì)

不允許重復(fù)的集合亦渗。不會(huì)有多個(gè)元素引用相同的對(duì)象预明。

Map:用Key來搜索的專家

使用鍵值對(duì)存儲(chǔ)柠逞。Map會(huì)維護(hù)與Key有關(guān)聯(lián)的值套像。兩個(gè)Key可以引用相同的對(duì)象衣撬,但Key不能重復(fù)乖订,典型的Key是String類型,但也可以是任何對(duì)象具练。

2.Arraylist 與 LinkedList 區(qū)別

Arraylist底層使用的是數(shù)組存讀數(shù)據(jù)效率乍构,插入刪除特定位置效率),

LinkedList底層使用的是雙向循環(huán)鏈表數(shù)據(jù)結(jié)構(gòu)(插入扛点,刪除效率特別高)哥遮。

學(xué)過數(shù)據(jù)結(jié)構(gòu)這門課后我們就知道采用鏈表存儲(chǔ),插入陵究,刪除元素時(shí)間復(fù)雜度不受元素位置的影響眠饮,都是近似O(1)而數(shù)組為近似O(n),因此當(dāng)數(shù)據(jù)特別多铜邮,而且經(jīng)常需要插入刪除元素時(shí)建議選用LinkedList.一般程序只用Arraylist就夠用了仪召,因?yàn)橐话銛?shù)據(jù)量都不會(huì)蠻大,Arraylist是使用最多的集合類松蒜。

2.ArrayList 與 Vector 區(qū)別(為什么要用Arraylist取代Vector呢扔茅?)

Vector類的所有方法都是同步的〗彰纾可以由兩個(gè)線程安全地訪問一個(gè)Vector對(duì)象召娜、但是一個(gè)線程訪問Vector,代碼要在同步操作上耗費(fèi)大量的時(shí)間惊楼。

Arraylist不是同步的玖瘸,所以在不需要同步時(shí)建議使用Arraylist秸讹。

3.HashMap 和 Hashtable 的區(qū)別

HashMap線程安全的,效率高一點(diǎn); 允許有null值的存在

HashTable是線程安全的,內(nèi)部的方法基本都經(jīng)過synchronized修飾; 只要有一個(gè)null雅倒,直接拋出NullPointerException璃诀。

Java5或以上的話,請(qǐng)使用ConcurrentHashMap吧

4.HashSet 和 HashMap 區(qū)別

5.HashMap 和 ConcurrentHashMap 的區(qū)別

1.ConcurrentHashMap對(duì)整個(gè)桶數(shù)組進(jìn)行了分割分段(Segment)屯断,然后在每一個(gè)分段上都用lock鎖進(jìn)行保護(hù),相對(duì)于HashTable的synchronized鎖的粒度更精細(xì)了一些侣诺,并發(fā)性能更好殖演,而HashMap沒有鎖機(jī)制,不是線程安全的年鸳。(JDK1.8之后ConcurrentHashMap啟用了一種全新的方式實(shí)現(xiàn),利用CAS算法趴久。)

2.HashMap的鍵值對(duì)允許有null,但是ConCurrentHashMap都不允許搔确。

6.HashSet如何檢查重復(fù)

當(dāng)你把對(duì)象加入HashSet時(shí)彼棍,HashSet會(huì)先計(jì)算對(duì)象的hashcode值來判斷對(duì)象加入的位置,同時(shí)也會(huì)與其他加入的對(duì)象的hashcode值作比較:

如果沒有相符的hashcode膳算,HashSet會(huì)假設(shè)對(duì)象沒有重復(fù)出現(xiàn)座硕。

如果發(fā)現(xiàn)有相同hashcode值的對(duì)象,這時(shí)會(huì)調(diào)用equals()方法來檢查hashcode相等的對(duì)象是否真的相同涕蜂。如果兩者相同华匾,HashSet就不會(huì)讓加入操作成功。

7.hashCode()與equals()的相關(guān)規(guī)定:

如果兩個(gè)對(duì)象相等机隙,則hashcode一定也是相同的

兩個(gè)對(duì)象相等,對(duì)兩個(gè)equals方法返回true

兩個(gè)對(duì)象有相同的hashcode值蜘拉,它們也不一定是相等

綜上,equals方法被覆蓋過有鹿,則hashCode方法也必須被覆蓋

hashCode()的默認(rèn)行為是對(duì)堆上的對(duì)象產(chǎn)生獨(dú)特值旭旭。如果沒有重寫hashCode(),則該class的兩個(gè)對(duì)象無論如何都不會(huì)相等(即使這兩個(gè)對(duì)象指向相同的數(shù)據(jù))葱跋。

8.comparable 和 comparator的區(qū)別持寄?

comparable接口實(shí)際上是出自java.lang包 它有一個(gè) compareTo(Object obj)方法用來排序

comparator接口實(shí)際上是出自 java.util 包它有一個(gè)compare(Object obj1, Object obj2)方法用來排序

對(duì)一個(gè)集合使用自定義排序時(shí),我們就要重寫compareTo方法或compare方法娱俺,當(dāng)我們需要對(duì)某一個(gè)集合實(shí)現(xiàn)兩種排序方式:

比如一個(gè)song對(duì)象中的歌名和歌手名分別采用一種排序方法的話际看,我們可以重寫compareTo方法和使用自制的Comparator方法或者以兩個(gè)Comparator來實(shí)現(xiàn)歌名排序和歌星名排序,第二種代表我們只能使用兩個(gè)參數(shù)版的Collections.sort().

Comparator定制排序

重寫compareTo方法實(shí)現(xiàn)按年齡來排序

9.如何對(duì)Object的list排序矢否?

對(duì)objects數(shù)組進(jìn)行排序仲闽,我們可以用Arrays.sort()方法

對(duì)objects的集合進(jìn)行排序,需要使用Collections.sort()方法

10.如何實(shí)現(xiàn)數(shù)組與List的相互轉(zhuǎn)換僵朗?

List轉(zhuǎn)數(shù)組:toArray(arraylist.size()方法赖欣;

數(shù)組轉(zhuǎn)List:Arrays的asList(a)方法

11.如何求ArrayList集合的交集 并集 差集 去重復(fù)并集

需要用到List接口中定義的幾個(gè)方法:

addAll(Collection c) :按指定集合的Iterator返回的順序?qū)⒅付现械乃性刈芳拥酱肆斜淼哪┪?/p>

實(shí)例代碼:

retainAll(Collection c): 僅保留此列表中包含在指定集合中的元素屑彻。

removeAll(Collection c) :從此列表中刪除指定集合中包含的所有元素。

12.集合的選用

主要根據(jù)集合的特點(diǎn)來選用顶吮,比如我們需要根據(jù)鍵值獲取到元素值時(shí)就選用Map接口下的集合社牲,需要排序時(shí)選擇TreeMap,不需要排序時(shí)就選擇HashMap,需要保證線程安全就選用ConcurrentHashMap.當(dāng)我們只需要存放元素值時(shí),就選擇實(shí)現(xiàn)Collection接口的集合悴了,需要保證元素唯一時(shí)選擇實(shí)現(xiàn)Set接口的集合比如TreeSet或HashSet搏恤,不需要就選擇實(shí)現(xiàn)List接口的比如ArrayList或LinkedList,然后再根據(jù)實(shí)現(xiàn)這些接口的集合的特點(diǎn)來選用湃交。

13.集合框架底層數(shù)據(jù)結(jié)構(gòu)總結(jié)

- Collection

1. List

Arraylist:數(shù)組(查詢快,增刪慢? 線程不安全,效率高? )

Vector:數(shù)組(查詢快,增刪慢 線程安全,效率低? )

LinkedList:鏈表(查詢慢,增刪快? 線程不安全,效率高? )

2. Set

HashSet(無序熟空,唯一):哈希表或者叫散列集(hash table)

LinkedHashSet:鏈表和哈希表組成 。 由鏈表保證元素的序 搞莺, 由哈希表證元素的唯一性

TreeSet(有序息罗,唯一):紅黑樹(自平衡的排序二叉樹。)

- Map

HashMap:基于哈希表的Map接口實(shí)現(xiàn)(哈希表對(duì)鍵進(jìn)行散列才沧,Map結(jié)構(gòu)即映射表存放鍵值對(duì))

LinkedHashMap:HashMap? 的基礎(chǔ)上加上了鏈表數(shù)據(jù)結(jié)構(gòu)

HashTable:哈希表

TreeMap:紅黑樹(自平衡的排序二叉樹)

14.HashMap 的工作原理及代碼實(shí)現(xiàn)

https://juejin.im/post/5ab0568b5188255580020e56

15.ConcurrentHashMap 的工作原理及代碼實(shí)現(xiàn)

http://www.cnblogs.com/chengxiao/p/6842045.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末迈喉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子温圆,更是在濱河造成了極大的恐慌挨摸,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岁歉,死亡現(xiàn)場離奇詭異油坝,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)刨裆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門澈圈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帆啃,你說我怎么就攤上這事瞬女。” “怎么了努潘?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵诽偷,是天一觀的道長。 經(jīng)常有香客問我疯坤,道長报慕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任压怠,我火速辦了婚禮眠冈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘菌瘫。我一直安慰自己蜗顽,他們只是感情好布卡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雇盖,像睡著了一般忿等。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上崔挖,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天贸街,我揣著相機(jī)與錄音,去河邊找鬼狸相。 笑死薛匪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的卷哩。 我是一名探鬼主播蛋辈,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼属拾,長吁一口氣:“原來是場噩夢啊……” “哼将谊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起渐白,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤尊浓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后纯衍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栋齿,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年襟诸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瓦堵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡歌亲,死狀恐怖菇用,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情陷揪,我是刑警寧澤惋鸥,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站悍缠,受9級(jí)特大地震影響卦绣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜飞蚓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一滤港、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧趴拧,春花似錦蜗搔、人聲如沸劲藐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽聘芜。三九已至,卻和暖如春缝龄,著一層夾襖步出監(jiān)牢的瞬間汰现,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工叔壤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瞎饲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓炼绘,卻偏偏與公主長得像嗅战,于是被迫代替她去往敵國和親飘言。 傳聞我的和親對(duì)象是個(gè)殘疾皇子婆硬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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

  • 一腻菇、集合入門總結(jié) 集合框架: Java中的集合框架大類可分為Collection和Map镣煮;兩者的區(qū)別: 1埃跷、Col...
    程序員歐陽閱讀 11,556評(píng)論 2 61
  • Java集合類可用于存儲(chǔ)數(shù)量不等的對(duì)象,并可以實(shí)現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)如棧,隊(duì)列等,Java集合還可以用于保存具有映射關(guān)...
    小徐andorid閱讀 1,939評(píng)論 0 13
  • 在一個(gè)方法內(nèi)部定義的變量都存儲(chǔ)在棧中金度,當(dāng)這個(gè)函數(shù)運(yùn)行結(jié)束后本讥,其對(duì)應(yīng)的棧就會(huì)被回收珊泳,此時(shí),在其方法體中定義的變量將不...
    Y了個(gè)J閱讀 4,416評(píng)論 1 14
  • (一) 一個(gè)人要發(fā)展平臺(tái)很重要拷沸。 錯(cuò)誤平臺(tái)上的努力是收不到成效的色查。 選對(duì)平臺(tái),你的努力才會(huì)恰到好處撞芍,創(chuàng)造出價(jià)值秧了。 ...
    瑩安閱讀 190評(píng)論 0 0
  • 看了一期關(guān)于剩男剩女該不該找個(gè)差不多對(duì)象的奇葩說辯題。我覺得這個(gè)題目很有意思勤庐,凡是自身單著的恐怕全是不愿意將就的示惊。...
    小沙發(fā)閱讀 371評(píng)論 0 0