當前位置:編程學習大全網 - 源碼下載 - arraylist和linkedlist內部的實現大致是怎樣的

arraylist和linkedlist內部的實現大致是怎樣的

對於處理壹列數據項,Java 提供了兩個類ArrayList 和LinkedList ,ArrayList 的內部實現是基於內部數組Object[] ,從概念上講,它更像數組,但LinkedList 的內部實現是基於壹組連接的記錄,所以,它更像壹個鏈表結構,它們在性能上有很大的差別。

ArrayList和LinkedList都實現了List接口,ArrayList的實現用的是數組,LinkedList是基於鏈表,ArrayList適合查找,LinkedList適合增刪。

ArrayList與LinkList兩者的區別:

ArrayList是基於索引的數據接口,它的底層是數組。它可以以O(1)時間復雜度對元素進行隨機訪問。

相對於ArrayList,LinkedList的插入,添加,刪除操作速度更快,因為當元素被添加到集合任意位置的時候,不需要像數組那樣重新計算大小或者是更新索引。

LinkedList比ArrayList更占內存,因為LinkedList為每壹個節點存儲了兩個引用,壹個指向前壹個元素,壹個指向下壹個元素。

但是要刪除數據卻是開銷很大的,因為這需要重排數組中的所有數據。

2) 相對於 ArrayList , LinkedList 插入是更快的。因為 LinkedList 不像 ArrayList 壹樣,不需要改變數組的大小,也不需要在數組裝滿的時候要將所有的數據重新裝入壹個新的數組,這是 ArrayList 最壞的壹種情況,時間復雜度是 O(n) ,而 LinkedList 中插入或刪除的時間復雜度僅為 O(1) 。 ArrayList 在插入數據時還需要更新索引(除了插入數組的尾部)。

3) 類似於插入數據,刪除數據時, LinkedList 也優於 ArrayList 。

4) LinkedList 需要更多的內存,因為 ArrayList 的每個索引的位置是實際的數據,而 LinkedList 中的每個節點中存儲的是實際的數據和前後節點的位置 ( 壹個 LinkedList 實例存儲了兩個值: Node first 和 Node last 分別表示鏈表的其實節點和尾節點,每個 Node 實例存儲了三個值: E item,Node next,Node pre) 。

什麽場景下更適宜使用 LinkedList,而不用ArrayList

1) 妳的應用不會隨機訪問數據 。因為如果妳需要LinkedList中的第n個元素的時候,妳需要從第壹個元素順序數到第n個數據,然後讀取數據。

2) 妳的應用更多的插入和刪除元素,更少的讀取數據 。因為插入和刪除元素不涉及重排數據,所以它要比ArrayList要快。

  • 上一篇:BUPT-mobile無線網絡連接與認證
  • 下一篇:在Bootstrap裏怎麽操作table
  • copyright 2024編程學習大全網