最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年01月19日 11:26:09   作者:小妮淺淺  
在本篇文章里小編給大家整理的是一篇關(guān)于Java Vector和ArrayList的異同分析及實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。

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

1.相同點(diǎn)

(1)都是有序集合。

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

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

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

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

2.不同點(diǎn)

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

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

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

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

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

ArrayList中:

public boolean add(E e) {
  ensureCapacity(size + 1); // 增加元素,判斷是否能夠容納。不能的話(huà)就要新建數(shù)組
  elementData[size++] = e;
  return true;
 public void ensureCapacity(int minCapacity) {
  modCount++;
  int oldCapacity = elementData.length;
  if (minCapacity > oldCapacity) {
    Object oldData[] = elementData; // 此行沒(méi)看出來(lái)用處,不知道開(kāi)發(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ū)別

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

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

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

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

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

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

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

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

7、籠統(tǒng)來(lái)說(shuō):LinkedList:增刪改快

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

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

相關(guān)文章

  • 攔截Druid數(shù)據(jù)源自動(dòng)注入帳密解密實(shí)現(xiàn)詳解

    攔截Druid數(shù)據(jù)源自動(dòng)注入帳密解密實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了攔截Druid數(shù)據(jù)源自動(dòng)注入帳密解密實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Java快速排序的實(shí)現(xiàn)詳細(xì)代碼及通俗解釋

    Java快速排序的實(shí)現(xiàn)詳細(xì)代碼及通俗解釋

    這篇文章主要介紹了Java快速排序?qū)崿F(xiàn)的相關(guān)資料,快速排序是一種高效的排序算法,通過(guò)選擇一個(gè)基準(zhǔn)值將數(shù)組分成兩部分,左邊的元素比基準(zhǔn)值小,右邊的元素比基準(zhǔn)值大,然后遞歸地對(duì)這兩部分進(jìn)行排序,需要的朋友可以參考下
    2025-02-02
  • Java 字符串截取及常見(jiàn)場(chǎng)景與方法詳解

    Java 字符串截取及常見(jiàn)場(chǎng)景與方法詳解

    在 Java 開(kāi)發(fā)中,截取字符串是一個(gè)非常常見(jiàn)的操作,無(wú)論是獲取文件名還是提取某些特定內(nèi)容,本文詳細(xì)介紹了截取字符串最后一位及其他常見(jiàn)截取操作的多種方法,幫助開(kāi)發(fā)者快速上手,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Jmeter如何將每次測(cè)試的結(jié)果保存到文件中

    Jmeter如何將每次測(cè)試的結(jié)果保存到文件中

    這篇文章主要介紹了Jmeter如何將每次測(cè)試的結(jié)果保存到文件中的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • IDEA運(yùn)行Tomcat中文亂碼出現(xiàn)的各種問(wèn)題

    IDEA運(yùn)行Tomcat中文亂碼出現(xiàn)的各種問(wèn)題

    這篇文章主要介紹了IDEA運(yùn)行Tomcat中文亂碼的各種問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java使用正則表達(dá)式判斷郵箱格式是否正確的方法

    java使用正則表達(dá)式判斷郵箱格式是否正確的方法

    這篇文章主要介紹了java使用正則表達(dá)式判斷郵箱格式是否正確的方法,涉及java正則表達(dá)式及字符串的相關(guān)操作技巧,需要的朋友可以參考下
    2015-07-07
  • 舉例講解Java中do-while語(yǔ)句的使用方法

    舉例講解Java中do-while語(yǔ)句的使用方法

    這篇文章主要介紹了Java中do-while語(yǔ)句的使用方法例子,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • 在SpringMVC框架下實(shí)現(xiàn)文件的上傳和下載示例

    在SpringMVC框架下實(shí)現(xiàn)文件的上傳和下載示例

    本篇文章主要介紹了在SpringMVC框架下實(shí)現(xiàn)文件的上傳和下載示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • 了解java架構(gòu)之微服務(wù)架構(gòu)—雪崩效應(yīng)

    了解java架構(gòu)之微服務(wù)架構(gòu)—雪崩效應(yīng)

    這篇文章主要介紹了了解java架構(gòu)之微服務(wù)架構(gòu)—雪崩效應(yīng),微服務(wù)化產(chǎn)品線(xiàn),每一個(gè)服務(wù)專(zhuān)心于自己的業(yè)務(wù)邏輯,并對(duì)外提供相應(yīng)的接口,看上去似乎很明了,其實(shí)還有很多的東西需要考慮,,需要的朋友可以參考下
    2019-06-06
  • Java初學(xué)者了解

    Java初學(xué)者了解"=="與equals的區(qū)別

    這篇文章主要介紹了Java初學(xué)者了解"=="與equals的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論

方城县| 三亚市| 军事| 宁远县| 梨树县| 临湘市| 沂水县| 嵩明县| 武邑县| 闻喜县| 扎鲁特旗| 都江堰市| 昂仁县| 腾冲县| 简阳市| 和龙市| 新巴尔虎右旗| 永清县| 岚皋县| 铁力市| 嵊泗县| 澄江县| 宁强县| 波密县| 东明县| 西昌市| 普安县| 中阳县| 邯郸县| 盐山县| 洪雅县| 玉林市| 西青区| 四子王旗| 金寨县| 寻乌县| 霞浦县| 厦门市| 东乌珠穆沁旗| 聂拉木县| 年辖:市辖区|