日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【蓝桥杯Java_C组·从零开始卷】第八节、集合——list详解(ArrayList、 LinkedList 和 Vector之间的区别)

發布時間:2024/8/26 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【蓝桥杯Java_C组·从零开始卷】第八节、集合——list详解(ArrayList、 LinkedList 和 Vector之间的区别) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ArrayList、 LinkedList 和 Vector之間的區別

ArrayList、 LinkedList 和 Vector都實現了List接口,是List的三種實現,所以在用法上非常相似。他們之間的主要區別體現在不同操作的性能上。后面會詳細分析。

ArrayList

ArrayList底層是用數組實現的,可以認為ArrayList是一個可改變大小的數組。隨著越來越多的元素被添加到ArrayList中,其規模是動態增加的。

LinkedList

LinkedList底層是通過雙向鏈表實現的。所以,LinkedList和ArrayList之前的區別主要就是數組和鏈表的區別。

數組中查詢和賦值比較快,因為可以直接通過數組下標訪問指定位置。

鏈表中刪除和增加比較快,因為可以直接通過修改鏈表的指針(Java中并無指針,這里可以簡單理解為指針。其實是通過Node節點中的變量指定)進行元素的增刪。

所以,LinkedList和ArrayList相比,增刪的速度較快。但是查詢和修改值的速度較慢。同時,LinkedList還實現了Queue接口,所以他還提供了offer(), peek(), poll()等方法。

Vector

Vector和ArrayList一樣,都是通過數組實現的,但是Vector是線程安全的。和ArrayList相比,其中的很多方法都通過同步(synchronized)處理來保證線程安全。

如果你的程序不涉及到線程安全問題,那么使用ArrayList是更好的選擇(因為Vector使用synchronized,必然會影響效率)。

二者之間還有一個區別,就是擴容策略不一樣。在List被第一次創建的時候,會有一個初始大小,隨著不斷向List中增加元素,當List認為容量不夠的時候就會進行擴容。Vector缺省情況下自動增長原來一倍的數組長度,ArrayList增長原來的50%。

效率對比試驗

package Action;import java.util.ArrayList; import java.util.LinkedList;public class test {public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<Integer>();LinkedList<Integer> linkedList = new LinkedList<Integer>();// ArrayList addlong startTime = System.nanoTime();for (int i = 0; i < 100000; i++) {arrayList.add(i);}long endTime = System.nanoTime();long duration = endTime - startTime;System.out.println("ArrayList add: " + duration);System.gc();// LinkedList addstartTime = System.nanoTime();for (int i = 0; i < 100000; i++) {linkedList.add(i);}endTime = System.nanoTime();long duration1 = endTime - startTime;System.out.println("LinkedList add: " + duration1);System.out.println((duration<duration1?"ArrayList add":"LinkedList add")+"更快");System.out.println("--------------------------");System.gc();// ArrayList getstartTime = System.nanoTime();for (int i = 0; i < 10000; i++) {arrayList.get(i);}endTime = System.nanoTime();long duration2 = endTime - startTime;System.out.println("ArrayList get: " + duration2);System.gc();// LinkedList getstartTime = System.nanoTime();for (int i = 0; i < 10000; i++) {linkedList.get(i);}endTime = System.nanoTime();long duration3 = endTime - startTime;System.out.println("LinkedList get: " + duration3);System.out.println((duration2<duration3?"ArrayList get":"LinkedList get")+"更快");System.out.println("--------------------------");System.gc();// ArrayList removestartTime = System.nanoTime();for (int i = 9999; i >= 0; i--) {arrayList.remove(i);}endTime = System.nanoTime();long duration4 = endTime - startTime;System.out.println("ArrayList remove: " + duration4);System.gc();// LinkedList removestartTime = System.nanoTime();for (int i = 9999; i >= 0; i--) {linkedList.remove(i);}endTime = System.nanoTime();long duration5 = endTime - startTime;System.out.println("LinkedList remove: " + duration5);System.out.println((duration4<duration5?"ArrayList remove":"LinkedList remove")+"更快");System.out.println("--------------------------");} }

效果

添加和刪除操作上LinkedList更快,但在查詢速度較慢。所以很多時候具體問題具體分析。

但是如果是多線程的時候要選擇Vector方便一些同步好處理。

如果不涉及到多線程就從LinkedList、ArrayList兩個中選。

LinkedList更適合從中間插入或者刪除(鏈表的特性)。

ArrayList更適合檢索和在末尾插入或刪除(數組的特性)。

希望能對大家有一些幫助。

總結

以上是生活随笔為你收集整理的【蓝桥杯Java_C组·从零开始卷】第八节、集合——list详解(ArrayList、 LinkedList 和 Vector之间的区别)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。