亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

Java Vector和ArrayList的異同分析及實(shí)例講解

瀏覽:60日期:2022-08-18 10:10:13

在線程中有兩種常用的方法,能夠通過數(shù)組實(shí)現(xiàn)相應(yīng)的功能,但除此之外在區(qū)別上也是很明顯的。本篇就其中的代表方法ArrayList和Vector進(jìn)行比較分析,一個是非線程安全,另一個是線程安全。在進(jìn)行相同和不同點(diǎn)的分析之后,帶來二者的實(shí)例代碼對比,幫助大家體會它們的異同。

1.相同點(diǎn)

(1)都是有序集合。

(2)數(shù)據(jù)不允許重復(fù)。

(3)都實(shí)現(xiàn)了list接口。

(4)都是通過數(shù)組實(shí)現(xiàn)的。

(5)數(shù)組進(jìn)行復(fù)制、移動、代價比較高,因此,適合隨機(jī)查詢和遍歷,不適合插入和刪除。

2.不同點(diǎn)

(1)ArrayList屬于線程不安全(線程不同步)即當(dāng)多線程進(jìn)行對ArrayList集合的操作時,有可能對數(shù)據(jù)進(jìn)行不正確的操作。如果只有一個線程會訪問到集合,那最好是使用ArrayList,因?yàn)樗豢紤]線程安全,效率會高些。

(2)Vector是線程安全的(同步線程)即當(dāng)在同一時刻只能有一個線程進(jìn)行對Vector集合的操作時,但是Vector要做到線程同步,需要大量的花費(fèi),可能消耗大量的內(nèi)存或者CPU。如果有多個線程會訪問到集合,那最好是使用Vector,因?yàn)椴恍枰覀冊偃タ紤]和編寫線程安全的代碼。

(3)ArrayList在內(nèi)存不夠時默認(rèn)擴(kuò)展1.5倍,Vector是默認(rèn)擴(kuò)展1倍。

(4)Vector提供indexOf(object,start)接口,ArrayList沒有。

3.實(shí)例代碼對比

ArrayList中:

public boolean add(E e) { ensureCapacity(size + 1); // 增加元素,判斷是否能夠容納。不能的話就要新建數(shù)組 elementData[size++] = e; return true; public void ensureCapacity(int minCapacity) { modCount++; int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { Object oldData[] = elementData; // 此行沒看出來用處,不知道開發(fā)者出于什么考慮 int newCapacity = (oldCapacity * 3)/2 + 1; // 增加新的數(shù)組的大小 if (newCapacity < minCapacity) newCapacity = minCapacity; // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); }}

Vector中:

private void ensureCapacityHelper(int minCapacity) { int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { Object[] oldData = elementData; int newCapacity = (capacityIncrement > 0) ? (oldCapacity + capacityIncrement) : (oldCapacity * 2); if (newCapacity < minCapacity) { newCapacity = minCapacity; } elementData = Arrays.copyOf(elementData, newCapacity); }}

Java中Vector和ArrayList的區(qū)別

首先看這兩類都實(shí)現(xiàn)List接口,而List接口一共有三個實(shí)現(xiàn)類,分別是ArrayList、Vector和LinkedList。List用于存放多個元素,能夠維護(hù)元素的次序,并且允許元素的重復(fù)。3個具體實(shí)現(xiàn)類的相關(guān)區(qū)別如下:

1、ArrayList是最常用的List實(shí)現(xiàn)類,內(nèi)部是通過數(shù)組實(shí)現(xiàn)的,它允許對元素進(jìn)行快速隨機(jī)訪問。數(shù)組的缺點(diǎn)是每個元素之間不能有間隔,當(dāng)數(shù)組大小不滿足時需要增加存儲能力,就要講已經(jīng)有數(shù)組的數(shù)據(jù)復(fù)制到新的存儲空間中。當(dāng)從ArrayList的中間位置插入或者刪除元素時,需要對數(shù)組進(jìn)行復(fù)制、移動、代價比較高。因此,它適合隨機(jī)查找和遍歷,不適合插入和刪除。

2、Vector與ArrayList一樣,也是通過數(shù)組實(shí)現(xiàn)的,不同的是它支持線程的同步,即某一時刻只有一個線程能夠?qū)慥ector,避免多線程同時寫而引起的不一致性,但實(shí)現(xiàn)同步需要很高的花費(fèi),因此,訪問它比訪問ArrayList慢。

3、LinkedList是用鏈表結(jié)構(gòu)存儲數(shù)據(jù)的,很適合數(shù)據(jù)的動態(tài)插入和刪除,隨機(jī)訪問和遍歷速度比較慢。另外,他還提供了List接口中沒有定義的方法,專門用于操作表頭和表尾元素,可以當(dāng)作堆棧、隊(duì)列和雙向隊(duì)列使用。

4、vector是線程(Thread)同步(Synchronized)的,所以它也是線程安全的,而Arraylist是線程異步(ASynchronized)的,是不安全的。如果不考慮到線程的安全因素,一般用Arraylist效率比較高。

5、如果集合中的元素的數(shù)目大于目前集合數(shù)組的長度時,vector增長率為目前數(shù)組長度的100%,而arraylist增長率為目前數(shù)組長度的50%.如過在集合中使用數(shù)據(jù)量比較大的數(shù)據(jù),用vector有一定的優(yōu)勢。

6、如果查找一個指定位置的數(shù)據(jù),vector和arraylist使用的時間是相同的,都是0(1),這個時候使用vector和arraylist都可以。而如果移動一個指定位置的數(shù)據(jù)花費(fèi)的時間為0(n-i)n為總長度,這個時候就應(yīng)該考慮到使用Linkedlist,因?yàn)樗苿右粋€指定位置的數(shù)據(jù),所花費(fèi)的時間為0(1),而查詢一個指定位置的數(shù)據(jù)時花費(fèi)的時間為0(i)。

ArrayList 和Vector是采用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲的數(shù)據(jù)以便增加和插入元素,都允許直接序號索引元素,但是插入數(shù)據(jù)要設(shè)計(jì)到數(shù)組元素移動 等內(nèi)存操作,所以索引數(shù)據(jù)快插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全)所以性能上比ArrayList要差,LinkedList使用雙向鏈表實(shí)現(xiàn)存儲,按序號索引數(shù)據(jù)需要進(jìn)行向前或向后遍歷,但是插入數(shù)據(jù)時只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入數(shù)度較快!

7、籠統(tǒng)來說:LinkedList:增刪改快

ArrayList:查詢快(有索引的存在)

到此這篇關(guān)于Java Vector和ArrayList的異同分析及實(shí)例講解的文章就介紹到這了,更多相關(guān)Java Vector和ArrayList的異同分析內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: a一级毛片免费播放 | 国产高清japanese国产在线观看 | 成人做爰全过程免费的叫床看视频 | 青青青视频自偷自拍视频1 青青青视频免费一区二区 青青青视频蜜桃一区二区 青青青爽国产在线视频 | 中文一区二区在线观看 | 狠狠亚洲婷婷综合色香 | 精品一区中文字幕 | 精品久久伦理中文字幕 | 妞干网免费在线视频 | 成人爱av18丰满 | 国产成人亚洲精品久久 | 国产精品亚洲精品青青青 | a级午夜毛片免费一区二区 a级午夜理论免费毛片 | 精品久久免费视频 | 亚欧综合 | 谁有免费黄色网址 | 在线亚洲精品国产成人二区 | 国产成人久久精品二区三区 | 亚洲国产韩国一区二区 | 国产超级乱淫片中文 | 国产欧美日韩不卡一区二区三区 | 久久久久亚洲国产 | 在线视频一区二区日韩国产 | 91tv最新永久在线地址 | 欧美精品国产一区二区 | 美女被靠视频免费网站不需要会员 | 8mav模特福利视频在线观看 | 公又粗又长又大又深好爽日本 | 亚洲高清在线观看看片 | 日韩欧美在线综合网高清 | 91短视频版在线观看www | 国产欧美日韩在线观看一区二区三区 | 国产三级精品最新在线 | 免看黄 | 色婷婷色综合激情国产日韩 | 中国一级黄色影片 | 美女久草| 日本一线一区二区三区免费视频 | 欧美成人aa久久狼窝动画 | 久草在线色站 | 欧美 亚洲 国产 精品有声 |