您好,登錄后才能下訂單哦!
歡迎關(guān)注公眾號(hào):Coder編程
獲取最新原創(chuàng)技術(shù)文章和相關(guān)免費(fèi)學(xué)習(xí)資料,隨時(shí)隨地學(xué)習(xí)技術(shù)知識(shí)!**
本章主要介紹Collection集合相關(guān)知識(shí),結(jié)合面試中會(huì)提到的相關(guān)問(wèn)題進(jìn)行知識(shí)點(diǎn)的梳理。希望能幫到大家~
基于JDK1.8,如有錯(cuò)誤,還望大家能夠指出!
涉及的Collection集合相關(guān)面試題
來(lái)自百度百科的回答:
Collection兩大體系:鏈表List、集合Set
List特點(diǎn):元素有序;元素可以重復(fù);元素都有索引(角標(biāo))
List里存放的對(duì)象是有序的,同時(shí)也是可以重復(fù)的,List關(guān)注的是索引,擁有一系列和索引相關(guān)的方法,查詢速度快。
因?yàn)橥鵯ist集合里插入或刪除數(shù)據(jù)時(shí),會(huì)伴隨著后面數(shù)據(jù)的移動(dòng),所有插入刪除數(shù)據(jù)速度慢。
Set特點(diǎn):元素?zé)o序;元素不可以重復(fù);
Set里存放的對(duì)象是無(wú)序,不能重復(fù)的,集合中的對(duì)象不按特定的方式排序,只是簡(jiǎn)單地把對(duì)象加入集合中。
同時(shí)集合中還有另外一種類型:Map(映射)。
Map特點(diǎn):鍵值對(duì);鍵不可以重復(fù);值可以重復(fù);
Map集合中存儲(chǔ)的是鍵值對(duì),鍵不能重復(fù),值可以重復(fù)。根據(jù)鍵得到值,對(duì)map集合遍歷時(shí)先得到鍵的set集合,對(duì)set集合進(jìn)行遍歷,得到相應(yīng)的值。
Collection
List (有序集合,允許相同元素和null)
--LinkedList (非同步,允許相同元素和null,遍歷效率低插入和刪除效率高)
--ArrayList (非同步,允許相同元素和null,實(shí)現(xiàn)了動(dòng)態(tài)大小的數(shù)組,遍歷效率高,用的多)
--Vector(同步,允許相同元素和null,效率低)
---Stack(繼承自Vector,實(shí)現(xiàn)一個(gè)后進(jìn)先出的堆棧)
Set (無(wú)序集合,不允許相同元素,最多有一個(gè)null元素)
--HashSet(無(wú)序集合,不允許相同元素,最多有一個(gè)null元素)
Map (沒(méi)有實(shí)現(xiàn)collection接口,key不能重復(fù),value可以重復(fù),一個(gè)key映射一個(gè)value)
--Hashtable (實(shí)現(xiàn)Map接口,同步,不允許null作為key和value,用自定義的類當(dāng)作key的話要復(fù)寫(xiě)hashCode和eques方法,)
--HashMap (實(shí)現(xiàn)Map接口,非同步,允許null作為key和value,用的多)
--WeakHashMap(實(shí)現(xiàn)Map接口)
(1)添加
boolean add(E o);
boolean add(Collection<? extends E> c);
(2)刪除
boolean remove(Object o);
boolean removeAll(Collection<? extends E> c)
void clear();
(3)判斷
a.判斷集合中是否有元素:boolean isEmpty();
b.判斷集合中是否包含某個(gè)元素:boolean contains(Object o);
c.判斷集合中是否包含某些元素:boolean contains(Collection<?> c);
(4)獲取
a.獲取集合中元素個(gè)數(shù):int size();
b.遍歷集合中所有元素:Iterator<E> iterator();
c.判斷兩個(gè)集合中是否存在相同的元素并保留兩個(gè)集合中相同的元素刪除不同的元素:boolean retainAll(Collection<?> c);
(5)其他
將集合中元素轉(zhuǎn)為數(shù)組:
a. Ojbect[] toArray();
b. <T> T[] toArray(); 泛型
Java8新增方法
在 JDK 8 以后,Collection 接口還提供了從集合獲取連續(xù)的或者并行流:
Stream<E> stream()
Stream<E> parallelStream()
于Collection接口相關(guān)還有一個(gè)抽象類AbstractCollection:
AbstractCollection是一個(gè)抽象類,實(shí)現(xiàn)了Collection接口的部分功能,實(shí)現(xiàn)了一些最基本的通用操作,把復(fù)雜的和業(yè)務(wù)相關(guān)的延遲到子類實(shí)現(xiàn)。
在AbstractCollection中,主要實(shí)現(xiàn)了contains(), isEmpty(), toArray(), remove(), clear() 這幾個(gè)操作。有興趣的同學(xué)可以自行研究下,邏輯都比較簡(jiǎn)單。
特別注意:List接口擴(kuò)展了一個(gè)一些方法,其中最重要,也是用的最多的是:
E get(int index) 返回指定索引的元素
數(shù)組特點(diǎn):
集合特點(diǎn):
可以看出數(shù)組和集合在數(shù)據(jù)的存儲(chǔ),訪問(wèn),類型,長(zhǎng)度等都有不同的地方。
擴(kuò)展知識(shí):
ArrayList里面的iterator方法采用了設(shè)計(jì)模式中的——工廠方法模式!
有興趣的同學(xué)可以后續(xù)看到我另外的文章“設(shè)計(jì)模式精講”專欄。
該問(wèn)題與第二個(gè)問(wèn)題類似~ 后續(xù)文章會(huì)有更詳細(xì)的介紹!
Collection兩大體系:鏈表List、集合Set 另映射Map
List接口及子類介紹
List是有序的Collection,使用此接口能夠精確的控制每個(gè)元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似于數(shù)組下標(biāo))來(lái)訪問(wèn)List中的元素,這類似于Java的數(shù)組。 和下面要提到的Set不同,List允許有相同的元素。 除了具有Collection接口必備的iterator()方法外,List還提供一個(gè)listIterator()方法,返回一個(gè)ListIterator接口,和標(biāo)準(zhǔn)的Iterator接口相比,ListIterator多了一些add()之類的方法,允許添加,刪除,設(shè)定元素,還能向前或向后遍歷。
實(shí)現(xiàn)List接口的常用類有:
在后續(xù)的文章中我們將一一詳細(xì)介紹這些類的相關(guān)特性!
Set接口及子類介紹
Set是一種不包含重復(fù)的元素的Collection,即任意的兩個(gè)元素e1和e2都有e1.equals(e2)=false,Set最多有一個(gè)null元素。很明顯,Set的構(gòu)造函數(shù)有一個(gè)約束條件,傳入的Collection參數(shù)不能包含重復(fù)的元素。
注意:必須小心操作可變對(duì)象(Mutable Object)。如果一個(gè)Set中的可變?cè)馗淖兞俗陨頎顟B(tài)導(dǎo)致Object.equals(Object)=true將導(dǎo)致一些問(wèn)題。
實(shí)現(xiàn)Set接口的常用類有:
在后續(xù)的文章中我們將一一詳細(xì)介紹這些類的相關(guān)特性!
Map接口及子類介紹
注意:Map沒(méi)有繼承Collection接口,Map提供key到value的映射。一個(gè)Map中不能包含相同的key,每個(gè)key只能映射一個(gè)value。
Map接口提供3種集合的視圖,Map的內(nèi)容可以被當(dāng)作一組key集合,一組value集合,或者一組key-value映射。
在后續(xù)的文章中我們將一一詳細(xì)介紹這些類的相關(guān)特性!
本章節(jié)介紹了Collection接口中的大部分可能在面試過(guò)程中會(huì)出現(xiàn)的內(nèi)容,
并沒(méi)有詳細(xì)去介紹其子類及其實(shí)現(xiàn)相關(guān)的原理。這方面的內(nèi)容會(huì)放在后續(xù)的章節(jié)中去詳細(xì)介紹。
歡迎關(guān)注公眾號(hào):Coder編程
獲取最新原創(chuàng)技術(shù)文章和相關(guān)免費(fèi)學(xué)習(xí)資料,隨時(shí)隨地學(xué)習(xí)技術(shù)知識(shí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。