JDK原始碼閱讀 集合類(1)

2022-08-16 14:03:16 字數 691 閱讀 6773

今天算是正式開始讀原始碼了。看了許多面經,發現不讀原始碼還是不行。今天稍微看了看一些介面和抽象類等,大致有了點理解。總結點它們之間的區別吧

collection是個介面,規範了一些相關的類必備的方法。其中,list、set、queue、deque都繼承自collection。而collections則是arrays的包裝,更多的還是豐富了對陣列的操作。這裡提一句arrays,雖然arrays是public的,但它的建構函式其實是private,所以也是無法例項化的,其作用還是在於它提供的諸多靜態方法。從前版本中,arrays.sort是通過歸併排序實現的,而目前是通過一種快排演算法實現的。當資料量超過一定量時,將採用並行演算法進行排序。

list是介面,而vector是可例項化的類。vector的作用和c++中的vector類似,都是可擴充套件的陣列。list實現的形式有兩種,一是arraylist類,二是linkedlist類。由名字可知,前者底層是陣列,後者是鍊錶。這兩類均實現了可擴充套件陣列的區別在於:vector速度較慢,但其執行緒安全,不允許多個執行緒同時訪問。list則是速度較快,但並不是執行緒安全的,因此允許多個執行緒同時訪問。

這二者發揮的作用是一致的,都是提供了鍵值對的字典功能。但dictionary是抽象類,而map是介面。目前dictionary已經被淘汰了,取而代之的是實現、擴充套件更為方便的map。

明天具體閱讀一下,hashmap、hashset、linkedlist、arraylist等。

JDK原始碼閱讀 集合框架 Iterator介面

迭代器 iterator 模式,又叫做游標 cursor 模式。gof給出的定義為 提供一種方法訪問乙個容器 container 物件中各個元素,而又不需暴露該物件的內部細節。從定義可見,迭代器模式是為容器而生。很明顯,對容器物件的訪問必然涉及到遍歷演算法。你可以一股腦的將遍歷方法塞到容器物件中去 ...

JDK 原始碼 閱讀

to be continuing.持續修改中。1.stringbuffer 所處類層次 易忽略點 這個類是執行緒安全的。所有的method直接或間接加synchronized。所以我們如果是單執行緒情況下也考慮到這個會不會影響到效率。當然可能jit可以進行這個優化,待我接下來驗證。預設情況下乙個長為...

《JDK原始碼閱讀三》 ArrayList類

1.預設初始容量是10 當新增第乙個元素時,如果 this.elementdata defaultcapacity empty elementdata 那麼預設初始大小設定為10 2.擴容大小為 1.5倍 關鍵 int newcapacity oldcapacity oldcapacity 1 在a...