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

試述ArrayList和LinkedList性能區(qū)別及使用場景

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

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

關(guān)鍵詞Java List;ArrayList;LinkedList

概述

List 是一個有序、可重復(fù)的集合,集合中每個元素都有其對應(yīng)的順序索引。它主要有兩個常用的實(shí)現(xiàn)類:ArrayList 類和LinkedList 類。

ArrayList 類實(shí)現(xiàn)了可變數(shù)組的大小,存儲在內(nèi)的數(shù)據(jù)稱為元素。使用 ArrayList 創(chuàng)建的集合,允許對集合中的元素進(jìn)行快速的隨機(jī)訪問,不過,向 ArrayList 中插入與刪除元素的速度相對較慢。

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

1時間復(fù)雜度

假設(shè)我們有一個很大的列表,它里面的元素已經(jīng)排好序了,這個列表可能是ArrayList類型的也可能是LinkedList類型的,現(xiàn)在我們對這個列表來進(jìn)行二分查找(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

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

2空間復(fù)雜度

在LinkedList中有一個私有的內(nèi)部類,定義如下:

private static class Entry {

Object element;

Entry next;

Entry previous;

}

每個Entry對象reference列表中的一個元素,同時還有在LinkedList中它的上一個元素和下一個元素。一個有1000個元素的LinkedList對象將有1000個鏈接在一起的Entry對象,每個對象都對應(yīng)于列表中的一個元素。這樣的話,在一個LinkedList結(jié)構(gòu)中將有一個很大的空間開銷,因?yàn)樗鎯@1000個Entity對象的相關(guān)信息。

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

3ArrayList和LinkedList區(qū)別與使用場景

(1)如果應(yīng)用程序?qū)?shù)據(jù)有較多的隨機(jī)訪問,ArrayList對象要優(yōu)于LinkedList對象;

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

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

作者簡介

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

參考文獻(xiàn)

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

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

主站蜘蛛池模板: 露脸一二三区国语对白| 久久综合伊人77777| 亚洲精品无码抽插日韩| 国产精品免费入口视频| 国产91高跟丝袜| 自慰网址在线观看| 1769国产精品免费视频| WWW丫丫国产成人精品| 国产资源站| а∨天堂一区中文字幕| 干中文字幕| 18禁黄无遮挡网站| 国产自在线播放| 亚洲最新在线| 亚洲欧美日韩色图| 91网在线| 亚洲V日韩V无码一区二区 | 日韩福利在线视频| 亚洲日本一本dvd高清| 久草青青在线视频| 在线播放国产99re| 97成人在线视频| 欧美va亚洲va香蕉在线| P尤物久久99国产综合精品| 亚洲免费播放| 国产幂在线无码精品| 国产精品香蕉在线| 91免费国产在线观看尤物| 亚洲日本中文综合在线| 国产欧美日韩在线一区| 国产网站免费观看| 亚洲91精品视频| 国产精品一区二区国产主播| 在线99视频| 亚洲热线99精品视频| 久久综合亚洲鲁鲁九月天| 国产91九色在线播放| 欧洲极品无码一区二区三区| 精品国产aⅴ一区二区三区| 亚洲啪啪网| 97视频免费在线观看| 正在播放久久| 人人看人人鲁狠狠高清| 日韩毛片免费观看| 亚洲综合色区在线播放2019 | 成人在线天堂| 亚洲人成影视在线观看| 国产福利微拍精品一区二区| 色妞永久免费视频| 国产在线自乱拍播放| 国产一区二区三区在线无码| 亚洲人成网线在线播放va| 国产91蝌蚪窝| 天天综合亚洲| 97视频在线精品国自产拍| 日本欧美在线观看| 国产免费好大好硬视频| 日韩经典精品无码一区二区| 欧美三级视频在线播放| 国产精品第三页在线看| 激情网址在线观看| 97av视频在线观看| 超碰aⅴ人人做人人爽欧美| 国产精品女熟高潮视频| 91丝袜美腿高跟国产极品老师| 色综合热无码热国产| 无码精油按摩潮喷在线播放 | 精品99在线观看| 国产chinese男男gay视频网| 国产一级在线播放| 亚洲一欧洲中文字幕在线| 欧美人人干| 亚洲人成成无码网WWW| 久久黄色小视频| 91亚洲国产视频| 国模粉嫩小泬视频在线观看| 丰满人妻被猛烈进入无码| 高清不卡一区二区三区香蕉| 久久99热这里只有精品免费看 | 精品国产中文一级毛片在线看| 91精品国产自产91精品资源| 国产理论一区|