摘要:同步眾所周知,是同步的而不是,在一些必要的方法上都加了關鍵字,但是這也會加大系統開銷。中有一個方法用來返回一個,以匿名內部類的方式實現的接口和類似,都用作于對集合進行迭代,不過沒有刪除功能,已經被取代。還有是的,但不是,這一點很重要。
在上篇文章ArrayList源碼淺析中分析了一下 ArrayList的源碼和一些重要方法,現在對比 ArrayList,總結一下 Vector和 ArrayList的不同
構造方法其實兩者在很多地方都是一樣的,然而在構造方法上面, Vector比 ArrayList多了一個方法:
public Vector(int initialCapacity, int capacityIncrement) { super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); this.elementData = new Object[initialCapacity]; this.capacityIncrement = capacityIncrement; }
主要是因為 ArrayList中沒有 capacityIncrement這個變量, vector的這個構造方法,不僅能夠指定初始化容量,還能指定當容量不夠時,容量自增的大小。下面看擴容方法.
擴容策略在 ArrayList中,擴容的時候一般都是增加0.5倍左右,而在 Vector中,如果指定了這個 capacityIncrement,就會在原來容量的基礎上增加 capacityIncrement;如果沒有指定,則增加一倍容量。
private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); elementData = Arrays.copyOf(elementData, newCapacity); }
除了這一點,其它和 ArrayList一模一樣。
同步眾所周知, Vector是同步的而 ArrayList不是, Vector在一些必要的方法上都加了 synchronized關鍵字,但是這也會加大系統開銷。
EnumerationVector中有一個 elements()方法用來返回一個 Enumeration,以匿名內部類的方式實現的:
public Enumerationelements() { return new Enumeration () { int count = 0; public boolean hasMoreElements() { return count < elementCount; } public E nextElement() { synchronized (Vector.this) { if (count < elementCount) { return elementData(count++); } } throw new NoSuchElementException("Vector Enumeration"); } }; }
Enumeration接口和 Iterator類似,都用作于對集合進行迭代,不過沒有刪除功能,已經被 Iterator取代。還有Iterator 是 Fast-Fail的,但 Enumeration不是,這一點很重要。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64444.html
摘要:底層使用的是雙向鏈表數據結構之前為循環鏈表,取消了循環。快速隨機訪問就是通過元素的序號快速獲取元素對象對應于方法。而接口就是用來標識該類支持快速隨機訪問。僅僅是起標識作用。,中文名為雙端隊列。不同的是,是線程安全的,內部使用了進行同步。 前言 學習情況記錄 時間:week 2 SMART子目標 :Java 容器 記錄在學習Java容器 知識點中,關于List的需要重點記錄的知識點。...
摘要:常用集合使用場景分析過年前的最后一篇,本章通過介紹,,,底層實現原理和四個集合的區別。和都是線程安全的,不同的是前者使用類,后者使用關鍵字。面試官會認為你是一個基礎扎實,內功深厚的人才到這里常用集合使用場景分析就結束了。 Java 常用List集合使用場景分析 過年前的最后一篇,本章通過介紹ArrayList,LinkedList,Vector,CopyOnWriteArrayList...
摘要:畢業兩個星期了,開始成為一名正式的碼農了。將指定位置的數據移除。但是問題是,為時,并不是直接一個大小為的數組,而是使用靜態變量來代替。此外,函數還做了越界檢查。返回迭代器,與之有一個搭配的輔助類。 畢業兩個星期了,開始成為一名正式的java碼農了。一直對偏底層比較感興趣,想著深入自己的java技能,看書、讀源碼、總結、造輪子實踐都是付諸行動的方法。說到看源碼,就應該由簡入難,逐漸加深,...
摘要:若遇到哈希沖突,則將沖突的值加到鏈表中即可。之后相比于之前的版本,之后在解決哈希沖突時有了較大的變化,當鏈表長度大于閾值默認為時,將鏈表轉化為紅黑樹,以減少搜索時間。有序,唯一紅黑樹自平衡的排序二叉樹。 本文是最最最常見Java面試題總結系列第三周的文章。主要內容: Arraylist 與 LinkedList 異同 ArrayList 與 Vector 區別 HashMap的底層...
摘要:繼承的類,泛型為時,注意和其他的類型不同。因為是線程安全簡單來說,是個一維數組。同樣,指定和,如果中間發生變化則會拋出異常。最后,可以,然后,使用基類可以實現和的快速賦值。線程安全也是線程安全的,和一樣,連函數都喪心病狂地同步了。 這么幾個比較常用的但是比較容易混淆的概念同出于 java.util 包。本文僅作幾個類的淺度解析。 (本文基于JDK1.7,源碼來自openjdk1.7。)...
閱讀 1896·2021-11-22 15:25
閱讀 1257·2021-11-19 09:40
閱讀 1861·2021-09-27 13:57
閱讀 992·2021-09-22 15:10
閱讀 976·2021-08-16 11:01
閱讀 2974·2021-07-23 17:51
閱讀 772·2019-08-30 15:55
閱讀 824·2019-08-30 13:58