Java中集合框架,Collection接口、Set接口、List接口、Map接口,已常常用的它們的實現類,簡單的JDK源碼分析底層實現

(一)集合框架:程序員

  Java語言的設計者對經常使用的數據結構和算法作了一些規範(接口)和實現(實現接口的類)。全部抽象出來的數據結構和操做(算法)統稱爲集合框架。算法

  程序員在具體應用的時候,沒必要考慮數據結構和算法實現細節,只須要用這些類建立一些對象,而後直接應用就能夠了,這樣就大大提升了編程效率。編程

 

(二)集合框架包含的內容:數組

 

 

 (三)集合框架的接口(規範)數據結構

   Collection接口:存儲一組不惟一,無序的對象框架

   List接口:存儲一組不惟一,有序的對象數據結構和算法

   Set接口:存儲一組惟一,無序的對象工具

   Map接口:存儲一組鍵值對象,提升鍵(key)到值(value)的映射spa

 (四)各類接口的實現類:設計

  List接口的2個經常使用實現類:ArrayList和LinkedList

    ArrayList類:在它的底層代碼中,實際是有一個Object型數組,經過一些方法實現數組的擴容,數組自己長度是在定義的時候就不能改變,JDK的源碼底層就是經過新建立一個數組,長度比原來的長,把以前原數組的每一個元素複製過來,而後把新數組的首地址賦值給了原數組的引用,就這樣實現了可變長度數組;因此ArrayList的特色就是:遍歷和隨機訪問的速度快,插入對象和刪除對象的效率就低,由於底層的實現是經過數組來實現

    LinkedList類:底層經過結點來實現的,它有2個Node結點屬性,一個根結點first,一個尾結點last。添加的元素是保存在Node結點屬性中item,看下面JDK源碼,而後經過Node還有2個屬性next和prev分別指向後一個保存元素的結點和指向前一個保存元素的結點;就這樣造成一條邏輯上的一條鏈,它們在堆內存中內存是不連續的;因此LinkedList類的特色:訪問元素的效率不高,可是插入和刪除元素的效率高,由於經過結點改變指向就能夠實現了。

    Map的實現類我就只講一個HashMap,TreeMap就不講了,就是添加進去的時候,有必定的順序,不過根本不重要,能夠藉助工具類Collections類方法來實現對集合元素的排序。

   HashMap底層就是經過結點數組(數組+結點)來實現的,爲何put()方法存key和value的時候,key不能重複,重複的話value會覆蓋原先的value,key值在底層是經過它的hashCode來保證惟一性

       一樣的來說解一下HashSet,給你們看看一個它的JDK源碼,map是HashMap類型,把數據存儲到map的key中,因此說HashSet存儲的元素是不能重複的

      

PRESENT是個常量

   關於集合就只講這些,大體瞭解底層的實現原理就能夠了,方便理解和記憶。

相關文章
相關標籤/搜索