成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Vector源碼分析(對(duì)比ArrayList)

wall2flower / 1838人閱讀

摘要:同步眾所周知,是同步的而不是,在一些必要的方法上都加了關(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é)一下 VectorArrayList的不同

構(gòu)造方法

其實(shí)兩者在很多地方都是一樣的,然而在構(gòu)造方法上面, VectorArrayList多了一個(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)。

Enumeration

Vector中有一個(gè) elements()方法用來(lái)返回一個(gè) Enumeration,以匿名內(nèi)部類(lèi)的方式實(shí)現(xiàn)的:

 public Enumeration elements() {
        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取代。還有IteratorFast-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

相關(guān)文章

  • Week 2 - Java 容器 - 詳細(xì)剖析 List 之 ArrayList, Vector,

    摘要:底層使用的是雙向鏈表數(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)。...

    MartinDai 評(píng)論0 收藏0
  • Java 常用List集合使用場(chǎng)景分析

    摘要:常用集合使用場(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...

    godruoyi 評(píng)論0 收藏0
  • 源碼|jdk源碼-ArrayListVector源碼閱讀

    摘要:畢業(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)入難,逐漸加深,...

    0x584a 評(píng)論0 收藏0
  • 這幾道Java集合框架面試題在面試中幾乎必問(wè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的底層...

    bigdevil_s 評(píng)論0 收藏0
  • HashMap,HashSet,Hashtable,VectorArrayList 的關(guān)系

    摘要:繼承的類(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。)...

    microcosm1994 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<