ArrayList、LinkedList、HashMap底層實現


ArrayList 底層的實現就是一個數組(固定大小),當數組長度不夠用的時候就會重新開辟一個新的數組,然后將原來的數據拷貝到新的數組內。

LinkedList 底層是一個鏈表,是由java實現的一個雙向鏈表其節點如下:

class Node 

{

  private Node privious;//指向前一個節點

  private Object value;//當前節點的value值

  private Node next;//指向下一個節點的值,類似於指針。

}

然后實現其增刪改查操作,和數據結構中鏈表的增刪改查完全相同,而且插入是有序的。

HashMap底層是一個數組+鏈表實現。其基本原理是:定義一個LinkedList的數組,然后將數據存儲到這個鏈表數組內,例如:LinkedList []list = new LinkedList[1000];這樣就定義了一個如下圖所示的數據結構:

 

其中上面一行是一個數組,數組中的一個元素對應一個鏈表。在插入元素的時候,首先根據key值來計算hash值h,然后計算h%1000得到一個數字,然后把該對象插入到對應的數組元素內:如:h%1000得到10,那就將對象插入到list[10]這個鏈表內。插入的

內容是一個數據項,其結構如下:

class{

  String key;

  Object value;

}

HashSet的底層實現是通過Map來實現的,Set中不允許有重復的元素,類似於集合,在HashSet的實現的時候,通過Map來實現,每次往Set里添加數據,都會將數據設置為Map的鍵值,Map的值設置一個默認值,因為Map的鍵值不能重復,所以每次添加到Set內的

數據也不能重復。

以上只是我簡單的理解,具體的代碼實現可以觀看源碼進行學習和分析。


免責聲明!

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



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