集合1

Java集合類(lèi)提供了一套設(shè)計(jì)良好的支持對(duì)一組對(duì)象進(jìn)行操作的接口和類(lèi)洼畅。

1、Java集合類(lèi)里面最基本的接口棚赔?

Collection:代表一組對(duì)象帝簇,每一個(gè)對(duì)象都是是它的子元素徘郭。

Set:不包含重復(fù)元素的Collection。

List:有順序的Collection丧肴,可重復(fù)残揉。

Map:Key-Value,Key不重復(fù)芋浮。

2抱环、集合類(lèi)為什么沒(méi)有實(shí)現(xiàn)Cloneable和Serializable接口?

集合類(lèi)接口指定了一組叫做元素的對(duì)象纸巷。集合類(lèi)接口的每一種具體的實(shí)現(xiàn)類(lèi)都可以選擇以它自己的方式對(duì)元素進(jìn)行保存和排序镇草。有的集合類(lèi)允許重復(fù)的鍵,有些不允許何暇。

克隆(cloning)或者是序列化(serialization)的語(yǔ)義和含義是跟具體的實(shí)現(xiàn)相關(guān)的陶夜。因此凛驮,應(yīng)該由集合類(lèi)的具體實(shí)現(xiàn)來(lái)決定如何被克隆或者是序列化裆站。

3、什么是迭代器(Iterator)?

Iterator接口提供了很多對(duì)集合元素進(jìn)行迭代的方法黔夭。每個(gè)集合類(lèi)都包含了可能返回 迭代器的實(shí)例的迭代方法宏胯。迭代器可以在迭代的過(guò)程中刪除底層集合的元素。

4本姥、Iterator和ListIterator的區(qū)別肩袍?

Iterator可遍歷Set,List集合婚惫,ListIterator只能遍歷List氛赐。

Iterator對(duì)集合只能向前遍歷,ListIterator可向前也可向后遍歷先舷。

ListIterator實(shí)現(xiàn)了Iterator接口艰管,并包含了其他功能。例如蒋川,增加元素牲芋,替換元素,獲取前一個(gè)和后一個(gè)元素的索引等等捺球。

5缸浦、HashMap的工作原理?

鍵值對(duì)形式存儲(chǔ)氮兵。HashMap有一個(gè)Hash()函數(shù)裂逐,它使用hashCode()和equals方法來(lái)向集合/從集合添加/檢索元素。當(dāng)使用put()方法時(shí)泣栈,HashMap會(huì)計(jì)算key的hash值絮姆,然后將鍵值對(duì)存儲(chǔ)在集合中合適的索引上醉冤。若key已存在,則更新value值篙悯。HashMap重要特性:容量(capacity)蚁阳,負(fù)載因子(load factor),擴(kuò)容極限(threshold resizing)鸽照。

6螺捐、hashCode()和equals()方法的重要性體現(xiàn)在?

這兩個(gè)方法用來(lái)確定鍵值對(duì)的索引矮燎,也用來(lái)發(fā)現(xiàn)重復(fù)元素定血。

7、HashMap秘HashTable區(qū)別诞外?

均實(shí)現(xiàn)Map接口澜沟。

HashMap允許鍵值是null(僅一個(gè)),HashTable峡谊,key不能為null茫虽。

HashTable同步,適合于多線程既们,HashMap不同步濒析,適用于單線程環(huán)境。

HashMap提供了可供應(yīng)用迭代的鍵的集合啥纸。HashTable提供了對(duì)鍵的列表 (Enumeration)号杏。

HashMap與HashTable保存key的方式與HashSet保存集合元素的要求完全相同。

若需要?jiǎng)?chuàng)建線程安全的Map實(shí)現(xiàn)類(lèi)斯棒,無(wú)須使用HashTable實(shí)現(xiàn)類(lèi)盾致,可能過(guò)Collections類(lèi)。

與HashSet類(lèi)似的是:盡量不要使用可變對(duì)象為HashMap荣暮,HashTable的key庭惜。

8、Array與ArrayList的區(qū)別渠驼?

Array可包含基本類(lèi)型和對(duì)象類(lèi)型蜈块,ArrayList只能包含對(duì)象類(lèi)型。

Array大小固定迷扇,ArrayList大小動(dòng)態(tài)變化百揭。

ArrayList提供了更多方法和特性:AddAll(),removeAll()蜓席,iterator()器一。

對(duì)于基本類(lèi)型數(shù)據(jù)狡刘,集合使用自動(dòng)裝箱來(lái)減少編碼工作量缤言。但是,當(dāng)處理固定大小的基本數(shù)據(jù)類(lèi)型的時(shí)候,這種方式相對(duì)比較慢六水。

9颅围、Enumeration接口和Iterator接口的區(qū)別有哪些粘我?

Enumeration速度是Iterator的2倍聂薪,同時(shí)占用更少的內(nèi)存。但是方仿,Iterator遠(yuǎn)遠(yuǎn)比Enumeration安全固棚,因?yàn)槠渌€程不能夠修改正在被iterator遍歷的集合里面的對(duì)象。同時(shí)仙蚜,Iterator允許調(diào)用者刪除底層集合里面的元素此洲,這對(duì)Enumeration來(lái)說(shuō)是不可能的

10、HashSet和TreeSet區(qū)別委粉?

HashSet由一個(gè)hash表實(shí)現(xiàn)呜师,元素?zé)o序。add()贾节,remove()汁汗,contains()。方法的時(shí)間復(fù)雜度O(1)氮双。

TreeSet由樹(shù)形結(jié)構(gòu)來(lái)實(shí)現(xiàn)碰酝,元素有序霎匈。add()戴差,remove(),Contains()方法時(shí)間復(fù)雜度O(logn)铛嘱。

11暖释、Collection和Collections類(lèi)區(qū)別?

Collection類(lèi)是集合類(lèi)的上級(jí)接口墨吓。

Collections是針對(duì)集合的一個(gè)幫助者類(lèi)球匕,他提供一系列靜態(tài)方法實(shí)現(xiàn)對(duì)集合的搜索、排序帖烘、線程安全化等操作亮曹。

12、Set判斷兩個(gè)對(duì)象相同使用equals()方法秘症,而不是"=="照卦。

13、HashSet集合判斷兩個(gè)元素相等乡摹?

HashSet采用hash算法來(lái)決定元素的存儲(chǔ)位置役耕。HashSet存入一個(gè)元素,HashSet會(huì)調(diào)用該對(duì)象的hashCode方法得到該對(duì)象的HashCode值聪廉,根據(jù)此值決定在HashSet中的存儲(chǔ)位置瞬痘。因此故慈,兩個(gè)判斷兩個(gè)對(duì)象相等,需要判斷equals()方法返回相等框全,以及hashCode()值相等察绷。底層采用數(shù)組存儲(chǔ)Key-Value對(duì)。

14津辩、LinkedHashSet

LinckedHashSet用鏈表來(lái)記錄集合元素的添加順序克婶,但其依然是個(gè)HashSet,不允許重復(fù)丹泉。

14情萤、使用Properties讀寫(xiě)屬性文件

將Map對(duì)象與屬性文件關(guān)聯(lián)起來(lái),即可以把Map對(duì)象中的key-value對(duì)寫(xiě)入(stroe()方法)屬性文件中摹恨,也可以把屬性文件中的“屬性名=屬性值”加載(load()方法)到Map對(duì)象中筋岛。

Properties里的key,value都是字符串類(lèi)型晒哄。

14睁宰、SortedMap接口與TreeMap

Map接口 - SortedMap接口 - TreeMap實(shí)現(xiàn)類(lèi)

TreeMap:紅黑樹(shù)數(shù)據(jù)結(jié)構(gòu)。其排序方式:自然排序寝凌,定制排序柒傻,見(jiàn)16。

14较木、WeakHashMap

與HashMap用法基本相似红符。

區(qū)別是HashMap的key強(qiáng)引用,key所引用的對(duì)象不會(huì)被垃圾回收伐债,WeakHashMap的key弱引用预侯,key所引用的對(duì)象可能被垃圾回收。

14峰锁、IdentifyHashMap

IdenfityHashMap:當(dāng)且僅當(dāng)兩個(gè)key嚴(yán)格相等(==)萎馅。

HashMap:equals()返回true,hashCode相同虹蒋。



15糜芳、Treeset

采用紅黑樹(shù)的結(jié)構(gòu)存儲(chǔ)集合元素。TreeSet會(huì)調(diào)用元素的compareTo(Object obj)方法比較兩個(gè)元素大小魄衅。向TreeSet集合中添加第一個(gè)元素時(shí)無(wú)須有compareTo方法峭竣,添加第二個(gè)元素時(shí)便會(huì)引發(fā)異常。向TreeSet集合中添加的元素必須有comopareTo方法徐绑。Java提供了一個(gè)Comparable接口邪驮,接口中定義了compareTo(Object obj)方法。TreeSet中添加的應(yīng)該是同一個(gè)類(lèi)的對(duì)象傲茄,否則引發(fā)異常毅访。對(duì)于TreeSet來(lái)說(shuō)判斷兩個(gè)對(duì)象是否相等的唯一標(biāo)準(zhǔn)是compareto方法返回是否是0沮榜。若在TreeSet中添加的對(duì)象,重寫(xiě)此對(duì)象的equals方法喻粹,需要保證equals方法與compareTo方法比較結(jié)果一致蟆融。推薦TreeSet和HashSet集合中添加不可變?cè)亍?/p>

16、自然排序守呜,定制排序型酥?

自然排序:實(shí)例對(duì)象的compareTo方法進(jìn)行比較,并按升序排列查乒。

定制排序:TreeSet中有一個(gè)方法弥喉,Comparator comparator():返回定制排序排序所使用的Comparator,如果是自然排序玛迄,則返回null由境。TreeSet treeSet = new TreeSet("傳入寫(xiě)好的Comparator實(shí)例對(duì)象")。Comparator接口中含有方法compare(T o1,T o2):用來(lái)比較兩個(gè)對(duì)象大小蓖议。TreeSet實(shí)現(xiàn)定制排序時(shí)虏杰,仍然不可以添加不同類(lèi)型的對(duì)象。

17勒虾、List判斷兩個(gè)對(duì)象的標(biāo)準(zhǔn)是什么纺阔?

equals()方法返回true。List在刪除元素時(shí)修然,List會(huì)調(diào)用該對(duì)象的equals()方法集資與集合元素進(jìn)行比較笛钝,如果該equals()方法以某個(gè)集合元素作為參數(shù)時(shí)返回true,List將會(huì)刪除該元素低零。List提供了iterator()(返回Iterator對(duì)象)婆翔,IistIterator()(返回ListIiterator對(duì)象)方法拯杠。ListIterator接口繼承了Iterator接口掏婶。

18、ArrayList與Vector

基于動(dòng)態(tài)數(shù)據(jù)潭陪,內(nèi)置可再分配的Object[]數(shù)組雄妥。

ArrayList與Vector設(shè)有參數(shù)initialCapacity設(shè)置該數(shù)組長(zhǎng)度,當(dāng)元素超出該數(shù)組長(zhǎng)度時(shí)依溯,initialCapacity自動(dòng)增加老厌。

當(dāng)添加大量元素時(shí),使用ensureCapacity(int minCapacity)一次性設(shè)置initicalCapacity黎炉,減少重新分配次數(shù)枝秤。

Object[]默認(rèn)長(zhǎng)度10。

ArrayList與Vector重新分配Object[]的兩個(gè)方法:

void ensureCapacity(int minCapacity):數(shù)組長(zhǎng)度增加minCapacity慷嗜。

void trimToSize():數(shù)組長(zhǎng)度為當(dāng)前元素個(gè)數(shù)淀弹。

Vector線程安全丹壕,ArrayList線程不安全。

Collections工具類(lèi)薇溃,可以將ArrayList變成線程安全菌赖。

19、固定長(zhǎng)度的List

數(shù)組操作類(lèi)Arrays沐序,提供了asList(Object....)方法琉用,將數(shù)組或多個(gè)對(duì)象轉(zhuǎn)換成一個(gè)List對(duì)象。

但這個(gè)List集合即不是ArrayList實(shí)現(xiàn)類(lèi)的實(shí)例策幼,也不是Vector實(shí)現(xiàn)類(lèi)的實(shí)例邑时,而且Arrays的肉類(lèi)部的ArrayList的實(shí)例。

即Arrays.ArrayList是一個(gè)固定長(zhǎng)度的List集合特姐,只能遍歷訪問(wèn)訪該集合里的元素刁愿,不能添加和刪除集合里的元素。(添加或刪除到逊,編譯不會(huì)報(bào)錯(cuò)铣口,運(yùn)行時(shí)會(huì)報(bào)錯(cuò))。

20觉壶、Queue

Queue有一個(gè)PriorityQueue實(shí)現(xiàn)類(lèi)脑题,一個(gè)Deque接口。

Deque提供了ArrayDeque和LinkedList兩個(gè)都實(shí)現(xiàn)類(lèi)铜靶。

21叔遂、PriorityQueue

保存隊(duì)列元素的順序并不是按加入隊(duì)列的順序,而是按隊(duì)列元素的大小進(jìn)行重新排序争剿。

不允許加入null元素已艰,因?yàn)樾枰獙?duì)隊(duì)列元素進(jìn)行排序。同樣排序有兩種方式蚕苇,自然排序和定制排序哩掺。見(jiàn)16

PriorityQueue與TreeSet對(duì)元素的要求一致。

22涩笤、Deque接口與ArrayDeque實(shí)現(xiàn)類(lèi)

Deque:雙端隊(duì)列嚼吞。創(chuàng)建時(shí)可指定一個(gè)numElement參數(shù)指定Object[]長(zhǎng)度,不指定默認(rèn)為16蹬碧。

ArrayDeque:Deque實(shí)現(xiàn)類(lèi)舱禽,基于數(shù)組實(shí)現(xiàn)的雙端隊(duì)列。與ArrayList實(shí)現(xiàn)機(jī)制基本相似恩沽√苤桑可當(dāng)成Stack使用。

23、LinkedList

LinckedList是List的實(shí)現(xiàn)類(lèi)里伯,并實(shí)現(xiàn)Deque接口绽昏。

因此它可被當(dāng)成雙端隊(duì)列和棧。

24俏脊、當(dāng)運(yùn)行程序需要很大的內(nèi)存空間時(shí)全谤,JVM默認(rèn)的內(nèi)存空間不足,需要設(shè)置Xmx,Xms兩個(gè)參數(shù)爷贫。-Xms:JVM的堆內(nèi)存初始大小认然,-Xmx;JVM的堆內(nèi)存最大大新选(最好不要超過(guò)物理內(nèi)存)卷员。

25、Map

key不允許重復(fù)腾务,即Map任意兩個(gè)key通過(guò)equals()方法比較返回總是false毕骡。

Map中的所有key組成了一個(gè)Set集合。

Map提供一個(gè)Entry內(nèi)部類(lèi)來(lái)封裝key-value對(duì)岩瘦。而計(jì)算Entry存儲(chǔ)時(shí)則只考慮Entry封裝的key未巫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市启昧,隨后出現(xiàn)的幾起案子叙凡,更是在濱河造成了極大的恐慌,老刑警劉巖密末,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件握爷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡严里,警方通過(guò)查閱死者的電腦和手機(jī)新啼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)刹碾,“玉大人燥撞,你說(shuō)我怎么就攤上這事〗塘颍” “怎么了叨吮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瞬矩。 經(jīng)常有香客問(wèn)我,道長(zhǎng)锋玲,這世上最難降的妖魔是什么景用? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上伞插,老公的妹妹穿的比我還像新娘割粮。我一直安慰自己,他們只是感情好媚污,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布舀瓢。 她就那樣靜靜地躺著,像睡著了一般耗美。 火紅的嫁衣襯著肌膚如雪京髓。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天商架,我揣著相機(jī)與錄音堰怨,去河邊找鬼。 笑死蛇摸,一個(gè)胖子當(dāng)著我的面吹牛备图,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赶袄,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼揽涮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了饿肺?” 一聲冷哼從身側(cè)響起绞吁,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎唬格,沒(méi)想到半個(gè)月后家破,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡购岗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年汰聋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喊积。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡烹困,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乾吻,到底是詐尸還是另有隱情髓梅,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布绎签,位于F島的核電站枯饿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏诡必。R本人自食惡果不足惜奢方,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蟋字,春花似錦稿蹲、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至忠聚,卻和暖如春设哗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咒林。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工熬拒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人垫竞。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓澎粟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親欢瞪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子活烙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法遣鼓,內(nèi)部類(lèi)的語(yǔ)法啸盏,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法骑祟,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,631評(píng)論 18 399
  • 3.3 集合 一方面回懦, 面向?qū)ο笳Z(yǔ)言對(duì)事物的體現(xiàn)都是以對(duì)象的形式,為了方便對(duì)多個(gè)對(duì)象的操作次企,就要對(duì)對(duì)象進(jìn)行存儲(chǔ)怯晕。另...
    閆子揚(yáng)閱讀 728評(píng)論 0 1
  • java筆記第一天 == 和 equals ==比較的比較的是兩個(gè)變量的值是否相等,對(duì)于引用型變量表示的是兩個(gè)變量...
    jmychou閱讀 1,497評(píng)論 0 3
  • title: java集合框架學(xué)習(xí)總結(jié) tags:集合框架 categories:總結(jié) date: 2017-03...
    行徑行閱讀 1,685評(píng)論 0 2
  • 同事這個(gè)東西缸棵,果真只有分開(kāi)以后才能做朋友
    小柴胡粉絲閱讀 100評(píng)論 0 0