成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

通過(guò)面試題,讓我們來(lái)了解Collection

HelKyle / 449人閱讀

摘要:說(shuō)一說(shuō)迭代器通過(guò)集合對(duì)象獲取其對(duì)應(yīng)的對(duì)象判斷是否存在下一個(gè)元素取出該元素并將迭代器對(duì)象指向下一個(gè)元素取出元素的方式迭代器。對(duì)于使用容器者而言,具體的實(shí)現(xiàn)不重要,只要通過(guò)容器獲取到該實(shí)現(xiàn)的迭代器的對(duì)象即可,也就是方法。

前言

歡迎關(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)面試題

1.什么是集合?

2.AVA中集合類型都有哪些?有什么特點(diǎn)?

3.說(shuō)一說(shuō)集合的父類Collection?

4.數(shù)組和集合都有哪些區(qū)別?

5.說(shuō)一說(shuō)迭代器Iterator

6.Collection接口中幾種重要的類和接口簡(jiǎn)介

1.什么是集合?
 **來(lái)自百度百科的回答:**

集合類存放于java.util包中。

集合類存放的都是對(duì)象的引用,而非對(duì)象本身,出于表達(dá)上的便利,我們稱集合中的對(duì)象就是指集合中對(duì)象的引用(reference)。

集合類型主要有3種:set(集)、list(列表)和map(映射)。

集合接口分為:Collection和Map,list、set實(shí)現(xiàn)了Collection接口

2.JAVA中集合類型都有哪些?各有什么特點(diǎn)?

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)的值。

3.說(shuō)一說(shuō)集合的父類Collection? 3.1 Collection 體系結(jié)構(gòu)圖

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接口)
3.2 Collection 中的主要方法

(1)添加
boolean add(E o);
boolean add(Collection c);

(2)刪除
boolean remove(Object o);
boolean removeAll(Collection 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 iterator();
c.判斷兩個(gè)集合中是否存在相同的元素并保留兩個(gè)集合中相同的元素刪除不同的元素:boolean retainAll(Collection c);

(5)其他
將集合中元素轉(zhuǎn)為數(shù)組:
a. Ojbect[] toArray();
b. T[] toArray(); 泛型

Java8新增方法
在 JDK 8 以后,Collection 接口還提供了從集合獲取連續(xù)的或者并行流:
Stream stream()
Stream 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) 返回指定索引的元素
4.數(shù)組和集合都有哪些區(qū)別?

數(shù)組特點(diǎn):

數(shù)組本質(zhì)上就是一段連續(xù)的內(nèi)存空間,用于記錄多個(gè)類型相同的數(shù)據(jù);

數(shù)據(jù)一旦聲明完畢,則內(nèi)存空間固定不變;

插入和刪除操作不方便,可能會(huì)移動(dòng)大量的元素并導(dǎo)致效率太低;

支持下標(biāo)訪問(wèn),可以實(shí)現(xiàn)隨機(jī)訪問(wèn);

數(shù)組中的元素可以是基本數(shù)據(jù)類型,也可以使用引用數(shù)據(jù)類型。

集合特點(diǎn):

內(nèi)存空間可以不連續(xù),數(shù)據(jù)類型可以不相同;

集合的內(nèi)存空間可以動(dòng)態(tài)的調(diào)整;

集合的插入刪除操作可以不移動(dòng)大量元素;

部分支持下標(biāo)訪問(wèn),部分不支持;

集合中的元素必須是引用數(shù)據(jù)類型(你存儲(chǔ)的是簡(jiǎn)單的int,它會(huì)自動(dòng)裝箱成Integer);

可以看出數(shù)組和集合在數(shù)據(jù)的存儲(chǔ),訪問(wèn),類型,長(zhǎng)度等都有不同的地方。
5.說(shuō)一說(shuō)迭代器 Iterator?

通過(guò)集合對(duì)象獲取其對(duì)應(yīng)的Iterator對(duì)象

判斷是否存在下一個(gè)元素

取出該元素并將迭代器對(duì)象指向下一個(gè)元素

Iterator iterator():取出元素的方式:迭代器。該對(duì)象必須依賴于具體容器,因?yàn)槊恳粋€(gè)容器的數(shù)據(jù)結(jié)構(gòu)都不同。
所以該迭代器對(duì)象是在容器中進(jìn)行內(nèi)部實(shí)現(xiàn)的。對(duì)于使用容器者而言,具體的實(shí)現(xiàn)不重要,只要通過(guò)容器獲取到該實(shí)現(xiàn)的迭代器的對(duì)象即可,也就是iterator方法。

擴(kuò)展知識(shí):
ArrayList里面的iterator方法采用了設(shè)計(jì)模式中的——工廠方法模式!
有興趣的同學(xué)可以后續(xù)看到我另外的文章“設(shè)計(jì)模式精講”專欄。
6.Collection接口中幾種重要的類和接口簡(jiǎn)介?

該問(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接口的常用類有:

LinkedList類 (底層數(shù)據(jù)結(jié)構(gòu)是鏈表,線程不安全)

ArrayList類 (底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,線程不安全)

Vector類 ?。ǖ讓訑?shù)據(jù)結(jié)構(gòu)是數(shù)組,線程安全)

Stack類 (顧名思義:棧,繼承至Vector類并進(jìn)行擴(kuò)展)

在后續(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接口的常用類有:

HashSet類 (底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組+單鏈表+紅黑樹(shù),無(wú)序)

LinkedHashSet (底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組+單鏈表+紅黑樹(shù)+雙向鏈表,無(wú)序)

TreeSet類 (底層數(shù)據(jù)結(jié)構(gòu)紅黑樹(shù),有序)

在后續(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映射。

Hashtable類

HashMap類   

在后續(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í)!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73786.html

相關(guān)文章

  • 聊一聊Iterable與Iterator的那些事!

    摘要:接口中的方法該接口主要是返回類型的元素上的一個(gè)迭代器。被動(dòng)作拋出的異常將被傳遞給調(diào)用者接口中的方法該方法提供了一個(gè)可以并行遍歷元素的迭代器以適應(yīng)現(xiàn)在多核時(shí)代并行遍歷的需求。 前言 歡迎關(guān)注公眾號(hào):Coder編程獲取最新原創(chuàng)技術(shù)文章和相關(guān)免費(fèi)學(xué)習(xí)資料,隨時(shí)隨地學(xué)習(xí)技術(shù)知識(shí)! 在上一篇文章通過(guò)面試題,讓我們來(lái)了解Collection,我們會(huì)發(fā)現(xiàn)Collection接口之上還有一個(gè)接口Ite...

    honmaple 評(píng)論0 收藏0
  • Java集合總結(jié)【面試+腦圖】,將知識(shí)點(diǎn)一網(wǎng)打盡!

    摘要:而在集合中,值僅僅是一個(gè)對(duì)象罷了該對(duì)象對(duì)本身而言是無(wú)用的。將這篇文章作為集合的總結(jié)篇,但覺(jué)得沒(méi)什么好寫(xiě)就回答一些面試題去了,找了一會(huì)面試題又覺(jué)得不夠系統(tǒng)。 前言 聲明,本文用的是jdk1.8 花了一個(gè)星期,把Java容器核心的知識(shí)過(guò)了一遍,感覺(jué)集合已經(jīng)無(wú)所畏懼了??!(哈哈哈....),現(xiàn)在來(lái)總結(jié)一下吧~~ 回顧目錄: Collection總覽 List集合就這么簡(jiǎn)單【源碼剖析】 Ma...

    yearsj 評(píng)論0 收藏0
  • Java面試前需要了解的東西

    摘要:我在面試前針對(duì)基礎(chǔ)也花了不少的時(shí)間,期間也將自己寫(xiě)過(guò)的博文粗略地刷了一遍,同時(shí)也在網(wǎng)上找了不少比較好的資料部分是沒(méi)看完的??疵嬖囶}也是校驗(yàn)自己是否真正理解了這個(gè)知識(shí)點(diǎn),也很有可能會(huì)有新的收獲。 一、前言 只有光頭才能變強(qiáng) 回顧前面: 廣州三本找Java實(shí)習(xí)經(jīng)歷 上一篇寫(xiě)了自己面試的經(jīng)歷和一些在面試的時(shí)候遇到的題目(筆試題和面試題)。 我在面試前針對(duì)Java基礎(chǔ)也花了不少的時(shí)間,期間也將...

    renweihub 評(píng)論0 收藏0
  • Java面試

    摘要:近段時(shí)間在準(zhǔn)備實(shí)習(xí)的面試,在網(wǎng)上看到一份面試題,就慢慢試著做,爭(zhēng)取每天積累一點(diǎn)點(diǎn)。現(xiàn)在每天給自己在面試題編寫(xiě)的任務(wù)是題,有時(shí)候忙起來(lái)可能就沒(méi)有時(shí)間寫(xiě)了,但是爭(zhēng)取日更,即使當(dāng)天沒(méi)更也會(huì)在之后的更新補(bǔ)上。 ????近段時(shí)間在準(zhǔn)備實(shí)習(xí)的面試,在網(wǎng)上看到一份面試題,就慢慢試著做,爭(zhēng)取每天積累一點(diǎn)點(diǎn)。????暫時(shí)手頭上的面試題只有一份,題量還是挺大的,有208題,所以可能講的不是很詳細(xì),只是我自...

    OnlyMyRailgun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<