深入理解ArrayList和LinkedList

2021-10-25 04:07:06 字數 1178 閱讀 4725

arraylist和linkedlist都是實現了list介面

優點:基於動態的陣列實現,有確定的下標,讀和改更加容易,存放元素可以重複,也可以為null,有序

缺點:不適合對元素進行頻繁的插入和刪除,插入和刪除都需要做大量的元素移動

特點:集合中預設建立為乙個大小為10的陣列,執行add方法時,會首先執行ensurecapacity()方法,當元素數量正好為陣列大小時,會建立乙個新的陣列,陣列大小為原來陣列的1.5倍,然後再將所有元素存放進擴充後的陣列

優點:由於是由雙鏈表實現的,其頭節點和尾節點很容易的進行修改,插入和刪除只需修改前一元素的尾節點和後一元素的頭節點即可,增刪不需要移動原有的元素

缺點:查詢和修改需要遍歷整個鍊錶來查詢元素,不利於查詢和修改

特點:執行add方法時,將要插入的位置前乙個元素的尾節點指向要插入元素的頭節點,要加入元素的頭節點指向前乙個元素的尾節點,然後要插入元素的尾結點指向後乙個元素的頭節點,後乙個元素的頭節點指向要插入元素的尾節點(刪除操作類似)

當我們建立乙個新的arraylist時,往裡面一直新增元素,第乙個元素新增後,顯示list的size為1,當我們debug進入add方法檢視,elementdata已經是乙個大小為10的陣列,說明預設建立就是為乙個大小為十的陣列

當我們新增到第十乙個元素時候,再次debug進入add方法,檢視此時的elementdata陣列的大小已經擴充到了15,說明當元素的數量大於當前已經建立的elementdata陣列的大小時,會對elementdata進行擴充,每次擴充1.5倍

Java 集合深入理解(7) ArrayList

有序的 元素輸出順序與輸入順序一致 元素可以為 null 效率高 占用空間更小 transient object elementdataprivate static final object defaultcapacity empty elementdata private static final...

深入理解L1 L2範數

說起l1 l2範數,大家會立馬想到這是機器學習中常用的正則化方法,一般新增在損失函式後面,可以看作是損失函式的懲罰項。那新增l1和l2正則化後到底有什麼具體作用呢?為什麼會產生這樣的作用?本篇博文將和大家一起去 l1範數 l2範數背後的原理。l1和l2的作用如下 理解l1,主要需要理解兩個問題。第一...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...