Java中各種線性表的效能分析
LinkedList與ArrayList、ArrayDeque的實現機制完全不同,ArrayList、ArrayDeque內部以陣列的形式來儲存集合中的元素,因此隨機訪問集合元素時有較好的效能;而LinkedList內部以連結串列的形式來儲存集合中的元素,因此隨機訪問集合元素時效能較差;但在插入、刪除元素時效能比較出色(只需要改變指標所指的地址即可)。需要指出的是,雖然Vector也是以陣列的形式來儲存集合元素的,但因為它實現了執行緒同步功能(而且實現機制也不好),所以各方面效能都比較差。
對於所有的內部基於陣列的集合實現,例如ArrayList、ArrayDeque等,使用隨機訪問的效能比使用Iterator迭代訪問的效能要好,因為隨機訪問會被對映成對陣列元素的訪問。
Java提供的List就是一個線性表介面,而ArrayList、LinkedList又是線性表的兩種典型的實現;基於陣列的線性表和基於鏈的線性表。Queue代表了佇列,Deque代表了雙端佇列(既可作為佇列使用,也可以作為棧使用),接下來對各種實現類的效能進行分析。
初學者可以無須理會ArrayList和LinkedList之間的效能差異,只需要知道LinkedList集合不僅提供了List的功能,還提供了雙端佇列、棧的功能就行。但對於一個成熟的Java程式設計師,在一些效能非常敏感的地方,可能需要慎重選擇哪個List實現。
一般來說,由於陣列以一塊連續記憶體區來儲存所有的陣列元素,所以陣列在隨機訪問時效能最好,所有的內部以陣列作為底層實現的集合在隨機訪問時效能都比較好;而內部以連結串列作為底層實現的集合在執行插入、刪除操作時有較好的效能。但總體來說,ArrayList的效能比LinkedList的效能要好,因此大部分時候都應該考慮使用ArrayList。
關於使用List集合有如下建議。
如果需要遍歷List集合元素,對於ArrayList、Vector集合,應該使用隨機訪問方法(get)來遍歷集合元素,這樣效能更好;對於LinkedList集合,則應該採用迭代器(Iterator)來遍歷集合元素。
如果需要經常執行插入、刪除操作來改變包含大量資料的List集合的大小,可考慮使用LinedList集合。使用ArrayList、Vector集合可能需要經常重新分配內部陣列的大小,效果可能較差。
如果有多個執行緒需要同時訪問List集合中的元素,開發者可考慮使用Collections將集合包裝成執行緒安全的集合。
相關文章
- 各種表連線方式對比分析
- Java中各Set實現類的效能分析Java
- 線性表分析及Java實現Java
- oracle 各種表間連線Oracle
- 提高 Java 程式碼效能的各種技巧Java
- Java中各種Log的使用Java
- Java中的各種關鍵字Java
- Oracle 的各種表Oracle
- JAVA的各種OJava
- java POI 操作EXCEL小例子+各種屬性JavaExcel
- java中各種垃圾收集器的原理Java
- 8分鐘搞懂Java中的各種鎖Java
- Java連線各種資料庫的例項 (轉)Java資料庫
- 【SQL 效能優化】表的三種連線方式SQL優化
- Java: 實現自迴歸分析/線性迴歸分析/基金各項指標計算等Java指標
- 淺談mysql中各種表空間(tablespaces)的概念MySql
- 輕鬆搞定分組報表中的各種排序排序
- TaroEcharts-各種圖表在Taro中的實踐Echarts
- .NET中各種資料庫連線大全資料庫
- 【SQL 效能最佳化】表的三種連線方式SQL
- 各種無線接入系統比較分析的準則(轉)
- Java內功祕籍-線性表Java
- MySQL大量資料插入各種方法效能分析與比較MySql
- java中的Static、final、Static final各種用法Java
- iOS 中的各種鎖iOS
- .NET中各種資料庫連線大全 (轉)資料庫
- Java 各種鎖的小結Java
- merge into三種表連線方式的效能比較(一)
- 淘寶詳情API介面在各種應用中的作用性API
- 各種儲存效能瓶頸場景的分析與最佳化手段
- Oracle各種表空間Oracle
- 線性結構-線性表
- C#中的各種各樣的索引器C#索引
- 各種連線資料庫的連線字串資料庫字串
- 線性表
- 資料結構線性表兩種方式分享資料結構
- js中的各種寬高JS
- javascript中的各種問題JavaScript