999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

試述ArrayList和LinkedList性能區別及使用場景

2020-10-21 06:17:18黃明輝
科學與信息化 2020年2期

摘 要 ArrayList和LinkedList都是實現了List接口的容器類,用于存儲一系列的對象引用。他們都可以對元素的增刪改查進行操作。本文通過時間復雜度、空間復雜度來說明一下他們性能區別及應用場景。

關鍵詞Java List;ArrayList;LinkedList

概述

List 是一個有序、可重復的集合,集合中每個元素都有其對應的順序索引。它主要有兩個常用的實現類:ArrayList 類和LinkedList 類。

ArrayList 類實現了可變數組的大小,存儲在內的數據稱為元素。使用 ArrayList 創建的集合,允許對集合中的元素進行快速的隨機訪問,不過,向 ArrayList 中插入與刪除元素的速度相對較慢。

LinkedList 類采用鏈表結構保存對象。需要頻繁向集合中插入和刪除元素時,使用 LinkedList 類比 ArrayList 類效果高,但是 LinkedList 類隨機訪問元素的速度則相對較慢。

1時間復雜度

假設我們有一個很大的列表,它里面的元素已經排好序了,這個列表可能是ArrayList類型的也可能是LinkedList類型的,現在我們對這個列表來進行二分查找(binary search),比較列表是ArrayList和LinkedList時的查詢速度,看下面的程序:

public class TestList ...{

public static final int N=50000;

public static List values;

static...{

Integer vals[]=new Integer[N];

Random r=new Random();

for(int i=0,currval=0;i

vals=new Integer(currval);

currval+=r.nextInt(100)+1;

}

values=Arrays.asList(vals);

}

static long timeList(List lst)...{

long start=System.currentTimeMillis();

for(int i=0;i

int index=Collections.binarySearch(lst, values.get(i));

if(index!=i)

System.out.println(“***錯誤***”);

}

return System.currentTimeMillis()-start;

}

public static void main(String args[])...{

System.out.println(“ArrayList消耗時間:”+timeList(new ArrayList(values)));

System.out.println(“LinkedList消耗時間:”+timeList(new LinkedList(values)));

}

}

輸出是:ArrayList消耗時間:15

LinkedList消耗時間:2596

這個結果不是固定的,但是基本上ArrayList的時間要明顯小于LinkedList的時間。因此在這種情況下不宜用LinkedList。

2空間復雜度

在LinkedList中有一個私有的內部類,定義如下:

private static class Entry {

Object element;

Entry next;

Entry previous;

}

每個Entry對象reference列表中的一個元素,同時還有在LinkedList中它的上一個元素和下一個元素。一個有1000個元素的LinkedList對象將有1000個鏈接在一起的Entry對象,每個對象都對應于列表中的一個元素。這樣的話,在一個LinkedList結構中將有一個很大的空間開銷,因為它要存儲這1000個Entity對象的相關信息。

ArrayList使用一個內置的數組來存儲元素,這個數組的起始容量是10。如果沒有足夠的空間來存放新的元素,數組將不得不被重新進行分配以便能夠增加新的元素。對數組進行重新分配,將會導致性能急劇下降。

3ArrayList和LinkedList區別與使用場景

(1)如果應用程序對數據有較多的隨機訪問,ArrayList對象要優于LinkedList對象;

(2)如果應用程序有更多的插入或者刪除操作,較少的數據讀取,LinkedList對象要優于ArrayList對象;

(3)不過ArrayList的插入,刪除操作也不一定比LinkedList慢,如果在List靠近末尾的地方插入,那么ArrayList只需要移動較少的數據,而LinkedList則需要一直查找到列表尾部,反而耗費較多時間,這時ArrayList就比LinkedList要快。

作者簡介

黃明輝(1967-),浙江杭州;副教授,現就職單位:湖北三峽職業技術學院電子信息學院,研究方向:軟件開發。

參考文獻

[1] 耿祥義,張躍平著.Java 2實用教程(第5版)[M].北京:清華大學出版社,2017.

[2] 歐陽桂秀.試談Java中ArrayList類的使用[J].電腦編程技巧與維護,2012,(22).

主站蜘蛛池模板: 欧美日韩在线亚洲国产人| 国内精品九九久久久精品| WWW丫丫国产成人精品| 国产精品9| 成人国产精品一级毛片天堂| 亚洲毛片一级带毛片基地| 天天摸天天操免费播放小视频| 日韩欧美在线观看| 欧美日韩国产在线观看一区二区三区| 婷婷五月在线| 久久伊人久久亚洲综合| 亚洲国产91人成在线| 国产高清免费午夜在线视频| 亚洲精选无码久久久| 欧美第一页在线| 国产成人一二三| 成人在线欧美| 丁香五月激情图片| 91亚洲免费| 99伊人精品| 在线观看免费黄色网址| 国产污视频在线观看| 免费久久一级欧美特大黄| 久久精品国产999大香线焦| 精品久久久久久成人AV| 四虎精品黑人视频| 午夜无码一区二区三区在线app| 日本不卡视频在线| aⅴ免费在线观看| 国产精品蜜芽在线观看| 久久久久中文字幕精品视频| 波多野结衣视频一区二区| 毛片久久久| 激情午夜婷婷| 国产成人乱码一区二区三区在线| 亚洲视频色图| 亚洲大学生视频在线播放| 人妻21p大胆| 亚洲AV无码乱码在线观看裸奔| 亚洲热线99精品视频| 国产亚洲视频免费播放| 国产女人水多毛片18| 99在线观看精品视频| 亚洲精品午夜无码电影网| 欧洲一区二区三区无码| 亚洲免费三区| 精品无码人妻一区二区| 午夜电影在线观看国产1区| 欧美亚洲国产精品第一页| 国产精品久久久久久搜索| 欧美日韩国产成人高清视频| 成人国产精品网站在线看| 亚洲国产成人久久77| 色婷婷成人| 另类重口100页在线播放| 国产高潮流白浆视频| 亚洲色无码专线精品观看| 亚洲男人在线天堂| 精品国产欧美精品v| 大乳丰满人妻中文字幕日本| 91破解版在线亚洲| 美女被躁出白浆视频播放| 又粗又硬又大又爽免费视频播放| 99re在线免费视频| 午夜福利网址| 亚洲国产成人麻豆精品| 成人欧美在线观看| 日本精品αv中文字幕| 亚洲大尺码专区影院| 国产乱肥老妇精品视频| 最近最新中文字幕在线第一页| 久久永久免费人妻精品| 久久青草热| 成人福利在线免费观看| 91色在线观看| 91麻豆精品视频| 国产自产视频一区二区三区| 成人a免费α片在线视频网站| 亚卅精品无码久久毛片乌克兰| 亚洲精品波多野结衣| 亚洲无线国产观看| 国产福利一区在线|