歡迎關注微信公衆號:Coder編程
獲取最新原創技術文章和相關免費學習資料,隨時隨地學習技術知識!**java
本章主要介紹Collection集合相關知識,結合面試中會提到的相關問題進行知識點的梳理。但願能幫到你們~
基於JDK1.8,若有錯誤,還望你們可以指出!
涉及的Collection集合相關面試題面試
**來自百度百科的回答:**
Collection兩大致系:鏈表List、集合Set編程
List特色:元素有序;元素能夠重複;元素都有索引(角標)
List裏存放的對象是有序的,同時也是能夠重複的,List關注的是索引,擁有一系列和索引相關的方法,查詢速度快。
由於往list集合裏插入或刪除數據時,會伴隨着後面數據的移動,全部插入刪除數據速度慢。設計模式
Set特色:元素無序;元素不能夠重複;
Set裏存放的對象是無序,不能重複的,集合中的對象不按特定的方式排序,只是簡單地把對象加入集合中。數組
同時集合中還有另一種類型:Map(映射)。安全
Map特色:鍵值對;鍵不能夠重複;值能夠重複;
Map集合中存儲的是鍵值對,鍵不能重複,值能夠重複。根據鍵獲得值,對map集合遍歷時先獲得鍵的set集合,對set集合進行遍歷,獲得相應的值。微信
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接口)
(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) 返回指定索引的元素
數組特色:
集合特色:
能夠看出數組和集合在數據的存儲,訪問,類型,長度等都有不一樣的地方。
Iterator iterator():取出元素的方式:迭代器。該對象必須依賴於具體容器,由於每個容器的數據結構都不一樣。
因此該迭代器對象是在容器中進行內部實現的。對於使用容器者而言,具體的實現不重要,只要經過容器獲取到該實現的迭代器的對象便可,也就是iterator方法。
擴展知識:
ArrayList裏面的iterator方法採用了設計模式中的——工廠方法模式!
有興趣的同窗能夠後續看到我另外的文章「設計模式精講」專欄。
該問題與第二個問題相似~ 後續文章會有更詳細的介紹!
Collection兩大致系:鏈表List、集合Set 另映射Map
List接口及子類介紹
List是有序的Collection,使用此接口可以精確的控制每一個元素插入的位置。用戶可以使用索引(元素在List中的位置,相似於數組下標)來訪問List中的元素,這相似於Java的數組。 和下面要提到的Set不一樣,List容許有相同的元素。 除了具備Collection接口必備的iterator()方法外,List還提供一個listIterator()方法,返回一個ListIterator接口,和標準的Iterator接口相比,ListIterator多了一些add()之類的方法,容許添加,刪除,設定元素,還能向前或向後遍歷。
實現List接口的經常使用類有:
在後續的文章中咱們將一一詳細介紹這些類的相關特性!
Set接口及子類介紹
Set是一種不包含重複的元素的Collection,即任意的兩個元素e1和e2都有e1.equals(e2)=false,Set最多有一個null元素。很明顯,Set的構造函數有一個約束條件,傳入的Collection參數不能包含重複的元素。
注意:必須當心操做可變對象(Mutable Object)。若是一個Set中的可變元素改變了自身狀態致使Object.equals(Object)=true將致使一些問題。
實現Set接口的經常使用類有:
在後續的文章中咱們將一一詳細介紹這些類的相關特性!
Map接口及子類介紹
注意:Map沒有繼承Collection接口,Map提供key到value的映射。一個Map中不能包含相同的key,每一個key只能映射一個value。
Map接口提供3種集合的視圖,Map的內容能夠被看成一組key集合,一組value集合,或者一組key-value映射。
在後續的文章中咱們將一一詳細介紹這些類的相關特性!
本章節介紹了Collection接口中的大部分可能在面試過程當中會出現的內容,
並無詳細去介紹其子類及其實現相關的原理。這方面的內容會放在後續的章節中去詳細介紹。
歡迎關注微信公衆號: Coder編程
獲取最新原創技術文章和相關免費學習資料,隨時隨地學習技術知識!
![]()