從頭認識java-9.4 List的簡介與效能

來源:互聯網
上載者:User

從頭認識java-9.4 List的簡介與效能

這一章節我們來討論一下List裡面的兩個常用的容器ArrayList和LinkedList。

1.相同之處

兩個list都是具有順序的序列

2.不同之處

ArrayList善於執行查詢操作,但是插入操作效能不好

LinkedList善於在中間插入元素,但是查詢的效能不好。

3.示範List的一些常用方法

package com.ray.ch09;import java.util.ArrayList;public class Test {public static void main(String[] args) {ArrayList list = new ArrayList();for (int i = 0; i < 10; i++) {list.add(i);}System.out.println(list.get(3));System.out.println(list.indexOf(5));list.remove(list.indexOf(3));for (Integer param : list) {System.out.println(param);}ArrayList list2 = new ArrayList();list2.add(5);list.retainAll(list2);for (Integer param : list) {System.out.println(param);}list2.clear();list.clear();}}

 

--------------------------------分割線--------------------------------------

下面是擴充內容


4.測試效能

因為上面教科書說了ArrayList善於查詢,LinkedList善於插入,那麼我們下面來做兩個實驗

(1)插入元素的效能測試

代碼:

package com.ray.ch09;import java.util.ArrayList;import java.util.LinkedList;public class Test {public static void main(String[] args) {long amount = 10000;// 隨時改變這個插入元素的個數long startTime = System.currentTimeMillis();ArrayList arrayList = new ArrayList();for (long i = 0; i < amount; i++) {arrayList.add(Math.ceil(i / 2));}long endTime = System.currentTimeMillis();System.out.println(ArrayList: + (endTime - startTime));System.gc();System.out.println(------------------------------);startTime = System.currentTimeMillis();LinkedList linkedList = new LinkedList();for (long i = 0; i < amount; i++) {linkedList.add(Math.ceil(i / 2));}endTime = System.currentTimeMillis();System.out.println(LinkedList: + (endTime - startTime));}}

 

我們上面的代碼是在list的中間插入一個元素。

我們通過幾個層級來測試:

amount=10000的輸出:

ArrayList:16
------------------------------
LinkedList:0


amount=100000的輸出:(大部分的時候是下面的結果)

ArrayList:31
------------------------------
LinkedList:15

 

amount=500000的輸出:(出現逆轉)

ArrayList:125
------------------------------
LinkedList:219

 

amount=5000000的輸出:(出現逆轉)

ArrayList:1953
------------------------------
LinkedList:2078

 

amount=9000000的輸出:(linkedlist耗盡記憶體)

ArrayList:3375
------------------------------

java.lang.OutOfMemoryError

 

綜上所述:LinkedList在資料規模較小的,插入的效能的確比ArrayList要來的好,但是,中間出現了轉折點,當資料達到一定程度,LinkedList插入的效能竟然比ArrayList要低,而且當數量更大時,LinkedList耗盡記憶體拋異常,LinkedList比ArrayList要來到耗記憶體,因為他使用鏈式儲存,儲存的資料比ArrayList要多。

 

(2)查看元素

代碼:

package com.ray.ch09;import java.util.ArrayList;import java.util.LinkedList;import java.util.Random;public class Test {public static void main(String[] args) {long amount = 1000000;// list的大小int times = 1000;// 查看次數ArrayList arrayList = new ArrayList();for (long i = 0; i < amount; i++) {arrayList.add(Math.ceil(i / 2));}LinkedList linkedList = new LinkedList();for (long i = 0; i < amount; i++) {linkedList.add(Math.ceil(i / 2));}System.out.println(===========查看測試開始===========);Random random = new Random();long startTime = System.currentTimeMillis();for (int i = 0; i < times; i++) {arrayList.get(random.nextInt(times));}long endTime = System.currentTimeMillis();System.out.println(ArrayList: + (endTime - startTime));startTime = System.currentTimeMillis();for (int i = 0; i < times; i++) {linkedList.get(random.nextInt(times));}endTime = System.currentTimeMillis();System.out.println(LinkedList: + (endTime - startTime));}}


我們先在兩個list裡面存放1000000個元素,然後進行隨機查詢。

 

times=1000時的輸出:

===========查看測試開始===========
ArrayList:0
LinkedList:16

 

times=10000時的輸出:

===========查看測試開始===========
ArrayList:0
LinkedList:969

 

times=100000時的輸出:

===========查看測試開始===========
ArrayList:0
LinkedList:等不了的那麼久

 

事實證明,linkedLIst的查詢效能非常差,ArrayList的非常好。

 

總結:這一章節我們主要講述了LinkedList和ArrayList,以及對兩者進行一次簡單的效能測試。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.