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


(一)集合框架:

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

  程序員在具體應用的時候,不必考慮數據結構和算法實現細節,只需要用這些類創建一些對象,然后直接應用就可以了,這樣就大大提高了編程效率。

 

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

 

 

 (三)集合框架的接口(規范)

   Collection接口:存儲一組不唯一,無序的對象

   List接口:存儲一組不唯一,有序的對象

   Set接口:存儲一組唯一,無序的對象

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

 (四)各種接口的實現類:

  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是個常量

   關於集合就只講這些,大致了解底層的實現原理就可以了,方便理解和記憶。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM