Java集合詳解及List源碼分析


對於數組我們應該很熟悉,一個數組在內存中總是一塊連續的存儲空間,數組的創建使用new關鍵字,數組是引用類型的數據,一旦第一個元素的位置確定,那么后面的元素位置也就確定了,數組有一個最大的局限就是數組一旦創建,他的長度就是固定的,不可以進行更改,如果數組空間不夠大,唯一的方法就是再創建一個大的數組,把原來的數組元素拷貝過去。

為了使程序鞥狗方便的存儲和操作數量不固定的數據,java加入了集合個概念,和數組最大的區別也就是長度可以改變,是一種動態的調整。

在java中一共有三種集合分別是List,Set,Map,三種集合有着各自的特點:

List(列表):集合中的每一個位置是按照索引位置放的,像一個櫃子,一層一層的,可以有重復的元素,當我們想要取數據的時候,直接找對應的櫃子的層號就可以找到,就是可以根據索引找到元素,是和數組最像的集合,

Set(集):集合中的每一個元素都是不按順序進行排列,這也決定了Set集合中沒有重復的元素,像籃子里的雞蛋,無序不重復。

Map(映射):集合中的每一個元素都是按照鍵值對的方式存儲,一個鍵對應一個值,鍵不可以重復,值可以重復,我們可以根據鍵找到值,也是無序的集合。

接下來我們看看各個集合類繼承和實現類

我們常說的三種集合其實是三個接口,List和Set集合共同繼承Collection這個父接口,Map集合是單獨的一個接口,他們一共有六個實現類,List的實現類是LinkedList和ArrayList

Set的實現類有HashSet和TreeSet,Map的實現類有HashMap和TreeMap


我們先看ArrayList的源碼:ArrayList的底層實現還是數組,只不過好多方法都封裝好了,不用我們去寫,看着好像一個可變長度的集合,在ArrayList的源碼中有一個數組,構造方法及操作集合的方法都是對這個數組進行操作





每次進行add添加元素操作時,都是把原來的元素復制到新的數組中,利用了System的arraycopy方法,這是native修飾的方法,數組的工具類Arrays中元素的復制也是利用了這個方法。

LinkedList的底層是用鏈表實現的,關於鏈表和數組的區別,請看另一篇文章:單鏈表的插入,查找,刪除       在這里詳細講了數組uhe鏈表的區別

我們看到他的內部有一個內部類Node(節點),定義了前指針,尾指針

所有的操作都是對節點進行操作,舉兩個方法例子:




免責聲明!

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



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