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內的
數據也不能重復。
以上只是我簡單的理解,具體的代碼實現可以觀看源碼進行學習和分析。