Java list的實現類


Java list的實現類

本文是根據博文整理

Java中,List接口一共有三個實現類:ArrayList、Vector和LinkedList。

其中ArrayList和Vector都是利用數組這一個數據結構實現的,所以具有較強的隨機訪問能力,但是相應的,插入和刪除的能力就比較弱:ArrayList和Vector要求實現所用的數組的元素之間是不能有間隔的,換言之就是如果你在中間刪除了一個元素,后面的都必須向前移動來補位。我猜這是為了防止數組碎片化的問題,而在末尾插入和刪除的代價相對比較小。還有一個問題,就是數組在初始化的時候要約定一個大小,所以當插入的元素個數大於當前空間的最大大小時,就需要申請新的內存空間、創建新的數組並將現有數據拷貝過去(ArrayList在內存不夠時默認是擴展50% + 1個,Vector是默認擴展1倍),這也是很耗時間的。所以這兩種適合隨機訪問和遍歷,不適合大量的增刪。

Vector和ArrayList的區別在於Vector支持線程之間的同步,也就是只有一個線程可以在同一時刻寫入該Vector。但是做到這種功能需要花費很高的代價,使用起來比較慢。

LinkedList是利用鏈表實現的,那么相應的,它的增刪代價比較小,但是隨機訪問的能力就弱了。ListedList還定義了比List接口要求的更多的方法,例如操作表頭和表尾的元素,可以用來當成隊列、堆棧或者雙向列表使用。

究竟使用哪一種實現類要看具體的使用場景。如果不涉及到多線程的話Vector不用也沒事,ArrayList時候隨機訪問比較多的情況,LinkedList適合增刪比較多的情況


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM