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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ArrayListLinkedList 性能比较

發(fā)布時間:2025/4/16 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ArrayListLinkedList 性能比较 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近在對比List下的兩大功臣,功臣之一為ArrayList;功臣之二為LinkedList;
通過這次再次深入理解,有了如下的幾點重新價值觀刷新:

  • 【插入】我們都知道因為ArrayList底層是數(shù)組實現(xiàn)的;LinkedList底層是鏈表實現(xiàn)的;所以對于新增數(shù)據(jù)而言,肯定是LinkedList性能遠遠高于ArrayList的性能;但實踐結(jié)果并非如此,ArrayList的新增性能并不低,而且通過測試,其比LinkedList插入速度還快。(測試JDK版本 1.8)
  • 【獲取】由于LinkedList是鏈表結(jié)構(gòu),沒有角標的概念,沒有實現(xiàn)RandomAccess接口,不具備隨機元素訪問功能,所以在get方面表現(xiàn)的差強人意,ArrayList再一次完勝。具體為何LinkedList會這么慢呢?其實是因為LinkedList是鏈表結(jié)構(gòu),沒有角標的概念,沒有實現(xiàn)RandomAccess接口,不具備隨機元素訪問功能,所以在get方面表現(xiàn)的差強人意
  • 【隨機根據(jù)某個索引插入元素,到底誰快呢?】
    操作代碼如下:
//迭代次數(shù)public static int ITERATION_NUM = 10000000;public static void main(String[] agrs) {insertPerformanceCompare();}//新增性能比較:public static void insertPerformanceCompare() {System.out.println("LinkedList新增測試開始");long start = System.nanoTime();List<Integer> linkedList = new LinkedList<Integer>();for (int x = 0; x < ITERATION_NUM; x++) {linkedList.add(x);}long end = System.nanoTime();System.out.println("linkedList time one:"+(end - start));long startInsert=System.nanoTime();//依次執(zhí)行,看執(zhí)行時間linkedList.add(0,11);linkedList.add(10,11);linkedList.add(100,11);linkedList.add(1000,11);linkedList.add(10000,11);linkedList.add(100000,11);linkedList.add(1000000,11);long endInsert=System.nanoTime();System.out.println("linkedList time two:"+(endInsert-startInsert));System.out.println("ArrayList新增測試開始");long startArray = System.nanoTime();List<Integer> arrayList = new ArrayList<Integer>();for (int x = 0; x < ITERATION_NUM; x++) {arrayList.add(x);}long endArray = System.nanoTime();System.out.println("arrayList time one:"+(endArray - startArray));long startArrayInsert=System.nanoTime();arrayList.add(0,11);arrayList.add(10,11);arrayList.add(100,11);arrayList.add(1000,11);arrayList.add(10000,11);arrayList.add(100000,11);arrayList.add(1000000,11);long endArrayInsert=System.nanoTime();System.out.println("arrayList time two:"+(endArrayInsert-startArrayInsert));} index insertArrayListLinkedList
0364682833657
10367065733118
100362817633256
1000327081444075
100003696530128725
10000036567301010909
1000000360655310099185
  • 【隨機刪除某一個位置的元素,到底誰快呢?】

remove關(guān)鍵代碼

linkedList.remove(0);linkedList.remove(10);linkedList.remove(100);linkedList.remove(1000);linkedList.remove(10000);linkedList.remove(100000);linkedList.remove(1000000);arrayList.remove(0);arrayList.remove(10);arrayList.remove(100);arrayList.remove(1000);arrayList.remove(10000);arrayList.remove(100000);arrayList.remove(1000000); index delArrayListLinkedList
0331928916816
10379665317964
100346286219898
1000347442427497
100003320296113838
10000033129301803475
1000000302952010050950

當看到如上數(shù)據(jù)時,不知道第一感是作何感受?其實當理解了其底層實現(xiàn)的時候,就不吃驚了。
通過如上數(shù)據(jù)可以發(fā)現(xiàn),對于ArrayList而言,其不管是通過索引增加到哪個位置還是移除某個元素,其用的時間都是均等的;而對于LinkedList而言,則隨著索引的增加用的時間逐漸增大。所以以上得到結(jié)論:

  • void add(int index, E element) 當數(shù)據(jù)量超過6位數(shù)之后,則考慮使用ArrayList吧
  • E remove(int index) 當數(shù)據(jù)量超過6位數(shù)之后,則考慮使用ArrayList吧

為何會出現(xiàn)這么大的差距呢?上述文章中我們曾提到過,對于ArrayList而言,因為其實現(xiàn)了RandomAccess,有了快速隨機訪問存儲元素的功能,所以只要是通過索引的操作,其都是通過角標實現(xiàn)的,進而不用遍歷整個集合,所以效率更高。

轉(zhuǎn)載于:https://www.cnblogs.com/huohuoL/p/10545414.html

總結(jié)

以上是生活随笔為你收集整理的ArrayListLinkedList 性能比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。