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

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

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

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

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

概述

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

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

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

1時(shí)間復(fù)雜度

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

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(“***錯(cuò)誤***”);

}

return System.currentTimeMillis()-start;

}

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

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

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

}

}

輸出是:ArrayList消耗時(shí)間:15

LinkedList消耗時(shí)間:2596

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

2空間復(fù)雜度

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

private static class Entry {

Object element;

Entry next;

Entry previous;

}

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

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

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

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

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

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

作者簡(jiǎn)介

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

參考文獻(xiàn)

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

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

主站蜘蛛池模板: 国产午夜精品鲁丝片| 欧洲av毛片| 最新日韩AV网址在线观看| 国产精品三级av及在线观看| 日本精品影院| 亚洲二区视频| 久久久久青草大香线综合精品 | 日韩福利视频导航| 亚洲欧美日韩色图| 成人伊人色一区二区三区| 久久久黄色片| 午夜精品福利影院| 亚洲资源在线视频| 国产成人区在线观看视频| 操国产美女| 日韩欧美亚洲国产成人综合| 欧美综合成人| 亚洲精品日产精品乱码不卡| 99热这里只有精品免费| 国产第八页| 欧美97欧美综合色伦图| 国产精品视频久| 呦视频在线一区二区三区| 成人国产免费| 久久久精品国产SM调教网站| 亚洲无码高清免费视频亚洲| 欧美激情视频一区| 国产精品福利尤物youwu| 乱人伦视频中文字幕在线| 国产精品视频3p| 国产十八禁在线观看免费| 午夜综合网| 国产精欧美一区二区三区| 色婷婷亚洲综合五月| 在线观看亚洲天堂| 麻豆国产精品一二三在线观看| 久久人搡人人玩人妻精品| 日本亚洲成高清一区二区三区| 人妻无码中文字幕第一区| 在线观看国产小视频| 亚洲欧美另类专区| 欧美性猛交一区二区三区| 国产无码制服丝袜| 黄色三级网站免费| 精品国产一区91在线| 不卡的在线视频免费观看| 欧美在线国产| 日本在线国产| 97免费在线观看视频| 热99精品视频| 色老头综合网| 91毛片网| 亚洲成人手机在线| 欧美日韩导航| 免费看av在线网站网址| 中文字幕亚洲精品2页| 日韩在线欧美在线| 欧美激情伊人| 尤物成AV人片在线观看| 中文字幕永久在线观看| 制服丝袜一区| 欧美成人手机在线视频| AV色爱天堂网| 国产美女自慰在线观看| 在线观看无码av免费不卡网站| 亚洲欧洲天堂色AV| 国产福利一区视频| 成人日韩欧美| 国产女人在线| 国产成人精品亚洲日本对白优播| 成人毛片在线播放| 在线观看欧美国产| 色香蕉影院| 91网红精品在线观看| 国产成人免费视频精品一区二区 | 久久永久视频| 激情乱人伦| 激情爆乳一区二区| 亚洲国产第一区二区香蕉| 四虎永久免费网站| 精品日韩亚洲欧美高清a| 日韩精品成人网页视频在线 |