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