ArrayList jdk1 8原始碼分析

2021-08-20 07:45:59 字數 1095 閱讀 2966

arraylist是執行緒非安全的陣列列表,優勢在於陣列結構,查詢效率高,修改效率較低;由下圖的類圖,可以看出
arraylist是可以序列化,複製的;

1、自定義初始化容量大小,int型別,值為非負數

public arraylist(int initialcapacity)  else if (initialcapacity == 0)  else 

}

2、無參構造,此時陣列為空,直到第一次新增元素時,才會定義為預設初始化大小10

public arraylist()
3、帶collection物件,將collection物件轉換為陣列,並將引用賦予elementdata,若物件有值,利用system.copy賦值給elementdata

public arraylist(collection extends e> c)  else 

}

最常用的新增元素,add的兩個方法:

public boolean add(e e)
2、contains方法,僅僅是遍歷列表資料,直到找尋到資料為止;如果資料量較大,建議使用hashset(基於hashmap的方式)

public boolean contains(object o) 

public int indexof(object o) else

return -1;

}

3、clear方法,遍歷列表,將陣列引用指向null,但是陣列本身長度不變,仍然占用記憶體,引用物件所佔記憶體需要等gc判斷是否有其它引用後選擇**與否。

public void clear()
其實還有些方法值得看一下,等後面有時間再去補充吧......

JDK1 8 HashMap putVal原始碼解讀

final v putval int hash,k key,v value,boolean onlyifabsent,boolean evict 該節點不為鍊錶最後乙個節點,判斷值是否相同,相同直接退出迴圈,因為此時e指向 p.next 即p.next是相同節點,需要替換 if e.hash has...

JDK1 8 HashMap resize原始碼解讀

final node resize newcap oldcap 2 左移1位相當於原值 2 並且原長度大於16 else if newcap oldcap 1 maximum capacity oldcap default initial capacity newthr oldthr 1 doubl...

ThreadLocal總結 jdk1 8原始碼

threadlocal為每個使用它的執行緒提供乙個變數的副本。threadlocal中的主要方法 public void set t value public void set t value 先呼叫thread類的靜態方法獲得當前執行緒的thread物件,每個執行緒對應的thread物件都有乙個t...