經過面試題,讓咱們來了解Collection

前言

歡迎關注微信公衆號:Coder編程
獲取最新原創技術文章和相關免費學習資料,隨時隨地學習技術知識!**java

本章主要介紹Collection集合相關知識,結合面試中會提到的相關問題進行知識點的梳理。但願能幫到你們~
基於JDK1.8,若有錯誤,還望你們可以指出!

涉及的Collection集合相關面試題面試

  • 1.什麼是集合?
  • 2.AVA中集合類型都有哪些?有什麼特色?
  • 3.說一說集合的父類Collection?
  • 4.數組和集合都有哪些區別?
  • 5.說一說迭代器Iterator
  • 6.Collection接口中幾種重要的類和接口簡介

1.什麼是集合?

**來自百度百科的回答:**
  1. 集合類存放於java.util包中。
  2. 集合類存放的都是對象的引用,而非對象自己,出於表達上的便利,咱們稱集合中的對象就是指集合中對象的引用(reference)。
  3. 集合類型主要有3種:set(集)、list(列表)和map(映射)。
  4. 集合接口分爲:Collection和Map,list、set實現了Collection接口

2.JAVA中集合類型都有哪些?各有什麼特色?

Collection兩大致系:鏈表List、集合Set編程

List特色:元素有序;元素能夠重複;元素都有索引(角標)
List裏存放的對象是有序的,同時也是能夠重複的,List關注的是索引,擁有一系列和索引相關的方法,查詢速度快。
由於往list集合裏插入或刪除數據時,會伴隨着後面數據的移動,全部插入刪除數據速度慢。設計模式

Set特色:元素無序;元素不能夠重複;
Set裏存放的對象是無序,不能重複的,集合中的對象不按特定的方式排序,只是簡單地把對象加入集合中。數組

同時集合中還有另一種類型:Map(映射)。安全

Map特色:鍵值對;鍵不能夠重複;值能夠重複;
Map集合中存儲的是鍵值對,鍵不能重複,值能夠重複。根據鍵獲得值,對map集合遍歷時先獲得鍵的set集合,對set集合進行遍歷,獲得相應的值。微信

3.說一說集合的父類Collection?

3.1 Collection 體系結構圖

圖片描述

Collection數據結構

List (有序集合,容許相同元素和null)
  --LinkedList (非同步,容許相同元素和null,遍歷效率低插入和刪除效率高)
  --ArrayList (非同步,容許相同元素和null,實現了動態大小的數組,遍歷效率高,用的多)
  --Vector(同步,容許相同元素和null,效率低)
   ---Stack(繼承自Vector,實現一個後進先出的堆棧)

Set (無序集合,不容許相同元素,最多有一個null元素)
  --HashSet(無序集合,不容許相同元素,最多有一個null元素)

Map (沒有實現collection接口,key不能重複,value能夠重複,一個key映射一個value)
  --Hashtable (實現Map接口,同步,不容許null做爲key和value,用自定義的類看成key的話要複寫hashCode和eques方法,)
  --HashMap (實現Map接口,非同步,容許null做爲key和value,用的多)
  --WeakHashMap(實現Map接口)

3.2 Collection 中的主要方法

(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.判斷集合中是否包含某個元素:boolean contains(Object o);
c.判斷集合中是否包含某些元素:boolean contains(Collection<?> c);

(4)獲取
a.獲取集合中元素個數:int size();
b.遍歷集合中全部元素:Iterator<E> iterator();
c.判斷兩個集合中是否存在相同的元素並保留兩個集合中相同的元素刪除不一樣的元素:boolean retainAll(Collection<?> c);

(5)其餘
將集合中元素轉爲數組:
a. Ojbect[] toArray();
b. <T> T[] toArray(); 泛型

Java8新增方法
在 JDK 8 之後,Collection 接口還提供了從集合獲取連續的或者並行流:
Stream<E> stream()
Stream<E> parallelStream()
於Collection接口相關還有一個抽象類AbstractCollection:
AbstractCollection是一個抽象類,實現了Collection接口的部分功能,實現了一些最基本的通用操做,把複雜的和業務相關的延遲到子類實現。
在AbstractCollection中,主要實現了contains(), isEmpty(), toArray(), remove(), clear() 這幾個操做。有興趣的同窗能夠自行研究下,邏輯都比較簡單。

特別注意:List接口擴展了一個一些方法,其中最重要,也是用的最多的是:
E get(int index) 返回指定索引的元素

4.數組和集合都有哪些區別?

數組特色:

  1. 數組本質上就是一段連續的內存空間,用於記錄多個類型相同的數據;
  2. 數據一旦聲明完畢,則內存空間固定不變;
  3. 插入和刪除操做不方便,可能會移動大量的元素並致使效率過低;
  4. 支持下標訪問,能夠實現隨機訪問;
  5. 數組中的元素能夠是基本數據類型,也可使用引用數據類型。

集合特色:

  1. 內存空間能夠不連續,數據類型能夠不相同;
  2. 集合的內存空間能夠動態的調整;
  3. 集合的插入刪除操做能夠不移動大量元素;
  4. 部分支持下標訪問,部分不支持;
  5. 集合中的元素必須是引用數據類型(你存儲的是簡單的int,它會自動裝箱成Integer);
能夠看出數組和集合在數據的存儲,訪問,類型,長度等都有不一樣的地方。

5.說一說迭代器 Iterator?

  1. 經過集合對象獲取其對應的Iterator對象
  2. 判斷是否存在下一個元素
  3. 取出該元素並將迭代器對象指向下一個元素

Iterator iterator():取出元素的方式:迭代器。該對象必須依賴於具體容器,由於每個容器的數據結構都不一樣。
因此該迭代器對象是在容器中進行內部實現的。對於使用容器者而言,具體的實現不重要,只要經過容器獲取到該實現的迭代器的對象便可,也就是iterator方法。

擴展知識:
ArrayList裏面的iterator方法採用了設計模式中的——工廠方法模式!
有興趣的同窗能夠後續看到我另外的文章「設計模式精講」專欄。

6.Collection接口中幾種重要的類和接口簡介?

該問題與第二個問題相似~ 後續文章會有更詳細的介紹!

Collection兩大致系:鏈表List、集合Set 另映射Map

List接口及子類介紹

  List是有序的Collection,使用此接口可以精確的控制每一個元素插入的位置。用戶可以使用索引(元素在List中的位置,相似於數組下標)來訪問List中的元素,這相似於Java的數組。 和下面要提到的Set不一樣,List容許有相同的元素。 除了具備Collection接口必備的iterator()方法外,List還提供一個listIterator()方法,返回一個ListIterator接口,和標準的Iterator接口相比,ListIterator多了一些add()之類的方法,容許添加,刪除,設定元素,還能向前或向後遍歷。

  實現List接口的經常使用類有:

  • LinkedList類 (底層數據結構是鏈表,線程不安全)
  • ArrayList類 (底層數據結構是數組,線程不安全)
  • Vector類  (底層數據結構是數組,線程安全)
  • Stack類 (顧名思義:棧,繼承至Vector類並進行擴展)

在後續的文章中咱們將一一詳細介紹這些類的相關特性!

Set接口及子類介紹

  Set是一種不包含重複的元素的Collection,即任意的兩個元素e1和e2都有e1.equals(e2)=false,Set最多有一個null元素。很明顯,Set的構造函數有一個約束條件,傳入的Collection參數不能包含重複的元素。   
注意:必須當心操做可變對象(Mutable Object)。若是一個Set中的可變元素改變了自身狀態致使Object.equals(Object)=true將致使一些問題。

  實現Set接口的經常使用類有:

  • HashSet類 (底層數據結構是數組+單鏈表+紅黑樹,無序)
  • LinkedHashSet (底層數據結構是數組+單鏈表+紅黑樹+雙向鏈表,無序)
  • TreeSet類 (底層數據結構紅黑樹,有序)

在後續的文章中咱們將一一詳細介紹這些類的相關特性!

Map接口及子類介紹
注意:Map沒有繼承Collection接口,Map提供key到value的映射。一個Map中不能包含相同的key,每一個key只能映射一個value。

Map接口提供3種集合的視圖,Map的內容能夠被看成一組key集合,一組value集合,或者一組key-value映射。

  • Hashtable類
  • HashMap類   

在後續的文章中咱們將一一詳細介紹這些類的相關特性!

文末

本章節介紹了Collection接口中的大部分可能在面試過程當中會出現的內容,
並無詳細去介紹其子類及其實現相關的原理。這方面的內容會放在後續的章節中去詳細介紹。
歡迎關注微信公衆號: Coder編程
獲取最新原創技術文章和相關免費學習資料,隨時隨地學習技術知識!
圖片描述
相關文章
相關標籤/搜索