91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vector與ArrayList在Java中的區別是什么

發布時間:2021-01-19 15:16:31 來源:億速云 閱讀:189 作者:Leah 欄目:開發技術

Vector與ArrayList在Java中的區別是什么?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

1.相同點

(1)都是有序集合。

(2)數據不允許重復。

(3)都實現了list接口。

(4)都是通過數組實現的。

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

2.不同點

(1)ArrayList屬于線程不安全(線程不同步)即當多線程進行對ArrayList集合的操作時,有可能對數據進行不正確的操作。如果只有一個線程會訪問到集合,那最好是使用ArrayList,因為它不考慮線程安全,效率會高些。

(2)Vector是線程安全的(同步線程)即當在同一時刻只能有一個線程進行對Vector集合的操作時,但是Vector要做到線程同步,需要大量的花費,可能消耗大量的內存或者CPU。如果有多個線程會訪問到集合,那最好是使用Vector,因為不需要我們再去考慮和編寫線程安全的代碼。

(3)ArrayList在內存不夠時默認擴展1.5倍,Vector是默認擴展1倍。

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

3.實例代碼對比

ArrayList中:

public boolean add(E e) {
  ensureCapacity(size + 1); // 增加元素,判斷是否能夠容納。不能的話就要新建數組
  elementData[size++] = e;
  return true;
 public void ensureCapacity(int minCapacity) {
  modCount++;
  int oldCapacity = elementData.length;
  if (minCapacity > oldCapacity) {
    Object oldData[] = elementData; // 此行沒看出來用處,不知道開發者出于什么考慮
    int newCapacity = (oldCapacity * 3)/2 + 1; // 增加新的數組的大小
    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的區別

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

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

2、Vector與ArrayList一樣,也是通過數組實現的,不同的是它支持線程的同步,即某一時刻只有一個線程能夠寫Vector,避免多線程同時寫而引起的不一致性,但實現同步需要很高的花費,因此,訪問它比訪問ArrayList慢。

3、LinkedList是用鏈表結構存儲數據的,很適合數據的動態插入和刪除,隨機訪問和遍歷速度比較慢。另外,他還提供了List接口中沒有定義的方法,專門用于操作表頭和表尾元素,可以當作堆棧、隊列和雙向隊列使用。

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

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

6、如果查找一個指定位置的數據,vector和arraylist使用的時間是相同的,都是0(1),這個時候使用vector和arraylist都可以。而
如果移動一個指定位置的數據花費的時間為0(n-i)n為總長度,這個時候就應該考慮到使用Linkedlist,因為它移動一個指定位置的數據,所花費的時間為0(1),而查詢一個指定位置的數據時花費的時間為0(i)。

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

7、籠統來說:LinkedList:增刪改快

看完上述內容,你們掌握Vector與ArrayList在Java中的區別是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄂托克旗| 绥棱县| 龙川县| 阜城县| 嘉禾县| 潼南县| 革吉县| 什邡市| 安陆市| 闽清县| 黄骅市| 靖江市| 临城县| 巴中市| 漳州市| 哈巴河县| 贞丰县| 嵊州市| 巴马| 利川市| 贵德县| 台安县| 惠安县| 临颍县| 温州市| 嘉定区| 晋州市| 商南县| 兴安县| 平阳县| 黄骅市| 蒲城县| 蓬莱市| 阿城市| 宜宾市| 漠河县| 贞丰县| 特克斯县| 温州市| 凤庆县| 辛集市|