Array、List、Set、與Map

            最近經歷了幾次面試,發現Java基礎還是很重要的,所以好好彌補之前遺留的漏洞還是很有必要的。基礎不牢固,就會越來越浮,無法走的深入。

        這篇文章,主要總結了映射、集合等容器的相關聯繫與區別,會有比較透徹的分析,聰明的你看了定會過目不忘~

        1、首先 ,我們來分析Array數組。

        Array數組通過下標來實現操作,速度快、效率高,但我們無法判斷其中有多少元素,我們只能通過length來明確它的大小。

        如果想專門操作Array,我們可以通過Arrays類來實現,它裏面有一組static函數。

 

        當我們不知道到底需要多少對象時,數組就顯得力不從心了,這時我們就要用到集合。


         2、Collection,最基本的集合接口,聲明瞭Set和List的通用方法,Set和List都繼承了Collection、Map。

         2.1 Set

         Set是一種比較簡單的集合。它不包含重複對象,且不按特定的方式存儲。

         Set是一個接口,HashSet和TreeSet對其進行了實現。HashSet類按照哈希算法來存取集合中的對象,存取速度比較快,爲快速查找而設計 ;TreeSet類實現了SortedSet接口,是保存次序的Set,底層爲樹結構,適用於對集合中的對象進行排序。 

       在Set中,實際存放的是對象的引用,而不是對象本身,這點我們可以實際放入幾個字符串及幾個引用,再通過size方法來測試。

       Set具有與Collection完全一樣的接口,因此沒有任何額外的功能,不像前面有兩個不同的List。實際上Set就是Collection,只是行爲不同(這是繼承與多態思想的典型應用:表現不同的行爲)。


       2.2 List

       List也是一個集合,但它可以存放重複對象。它通過索引來操作,不按順序存儲,但通過鏈表維護了訪問順序。

       List也是一個接口,ArrayList和LinkedList、Vector對其進行了實現。ArrayList代表長度可變的數組,可以對元素進行快速隨機的訪問,但向ArrayList()中插入與刪除元素的速度慢。而LinkedList在實現中採用了雙向鏈表數據結構,彌補了ArrayList插入與刪除速度慢的缺陷,但無法滿足快速隨機訪問的要求。

       

       3、Map

       Map是一種key-value數據結構的集合,也是一個接口,它沒有繼承與Collection接口。從Map集合中檢索元素時,只要給出鍵對象,就會返回對應的值對象。

       標準的Java類庫中包含了幾種不同的Map:HashMap, TreeMap, LinkedHashMap。它們都有同樣的基本接口Map,但是行爲、效率、排序策略、保存對象的生命週期和判定“鍵”等價的策略等各不相同。 

        HashMap使用了hashCode來取代對鍵的緩慢搜索。HashCode是“相對唯一”用以代表對象的int值,它是通過將該對象的某些信息進行轉換而生成的。

        LinkedHashMap: 類似於HashMap,但是迭代遍歷它時,取得“鍵值對”的順序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一點。而在迭代訪問時發而更快,因爲它使用鏈表維護內部次序。 

             TreeMap : 基於紅黑樹數據結構的實現。查看“鍵”或“鍵值對”時,它們會被排序(次序由Comparabel或Comparator決定)。TreeMap的特點在於,你得到的結果是經過排序的。

       

        小結,來圖:

         結構圖:

        

        集合對比圖:

         

         下面整理的比較常用:

                 HashSet:繼承於Set;散列存儲,無序;不可重複;

       HashMap:繼承與Map;散列存儲,無序;不可重複;

                ArrayList:繼承於List;有序存儲;可以重複;可以確定訪問次序;

       LinkList:任意位置進行高效的插入和刪除操作;有序序列。



發佈了145 篇原創文章 · 獲贊 37 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章