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

基于java構(gòu)造方法Vector遍歷元素源碼分析

 更新時(shí)間:2021年09月09日 17:31:53   作者:叫我王員外就行  
本篇文章是關(guān)于ava構(gòu)造方法Vector源碼分析系列文章,本文主要介紹了Vector遍歷元素的源碼分析,有需要的朋友可以借鑒參考下,希望可以有所幫助

(注意:本文基于JDK1.8)

前言

任何一個(gè)容器類(lèi)對(duì)象用于持有元素后,總是需要遍歷元素的,即挨個(gè)去訪問(wèn)每個(gè)元素1次,而遍歷元素,除了常規(guī)的依賴(lài)于數(shù)組對(duì)象的下標(biāo)之外,更常用的是封裝好的迭代器,今天就來(lái)學(xué)習(xí)Vector中的迭代器是如何設(shè)計(jì)的,與迭代器相關(guān)的方法有:

iterator()

listIterator()

listIterator(int index)

3個(gè)Vector中的定義的方法,均會(huì)返回一個(gè)迭代器對(duì)象……簡(jiǎn)單說(shuō)說(shuō)這3個(gè)方法的來(lái)歷

iterator()方法的來(lái)歷

iterator()方法,是Vector實(shí)現(xiàn)的Iterable接口規(guī)范的方法,如何你直觀的去看Vector的類(lèi)結(jié)構(gòu),你并找不到Iterable接口的定義,你看到的應(yīng)該是這樣的:

public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
      …………省略代碼…………
}

那么Iterable接口在哪里呢?沒(méi)錯(cuò),就在List接口中,List接口繼承了Collection接口,而Collection接口則又繼承了Iterable接口,因?yàn)閂ector實(shí)現(xiàn)了List接口,所以間接獲得iterator()方法的實(shí)現(xiàn)需求。

List接口表示具備線性表的能力、Collection接口表示具備集合的能力,而Iterable接口則表示具備可遍歷的能力

List擴(kuò)展了Collection的能力,而Collection又?jǐn)U展了Iterable的能力,List的能力最大,且也符合這樣的規(guī)范,既然作為線性表,當(dāng)然應(yīng)該具備Collection中的定義的能力,而既然作為集合,應(yīng)該具備可遍歷元素的能力。

 listIterator()與listIterator(int)方法的來(lái)歷

這兩個(gè)方法,則來(lái)源于Vector的父類(lèi)AbstractList中的定義,只不過(guò)Vector均對(duì)其進(jìn)行了重寫(xiě),而AbstractList則是根據(jù)自己實(shí)現(xiàn)的List接口,而實(shí)現(xiàn)的這兩個(gè)方法。話(huà)不多少,接下來(lái)看看

iterator()方法分析

    public synchronized Iterator<E> iterator() {
        return new Itr();
    }

用于返回一個(gè)迭代器對(duì)象的方法,synchronized修飾,只有獲取到對(duì)象的鎖的線程才能執(zhí)行該方法

1、創(chuàng)建Itr對(duì)象

Itr是定義在Vector中的普通內(nèi)部類(lèi),它產(chǎn)生的對(duì)象用于表示迭代器,也稱(chēng)為迭代器對(duì)象

2、向調(diào)用者返回迭代器對(duì)象

listIterator()方法分析

    public synchronized ListIterator<E> listIterator() {
        return new ListItr(0);
    }

用于返回一個(gè)迭代器對(duì)象的方法,此迭代器用于從第一個(gè)元素開(kāi)始遍歷

1、創(chuàng)建ListItr對(duì)象

ListItr也為Vecor中的定義的一個(gè)普通內(nèi)部類(lèi),它的構(gòu)造方法可以傳入的一個(gè)參數(shù),表示起始下標(biāo)(從哪個(gè)元素開(kāi)始)

2、向調(diào)用者返回ListItr對(duì)象

listIterator(int)方法分析

    public synchronized ListIterator<E> listIterator(int index) {
        if (index < 0 || index > elementCount)
            throw new IndexOutOfBoundsException("Index: "+index);
        return new ListItr(index);
    }

用于返回一個(gè)迭代器對(duì)象,傳入的參數(shù)表示此迭代器可以從哪個(gè)元素開(kāi)始

1、檢查傳入的下標(biāo)是否合理

當(dāng)傳入下標(biāo)小于0、或者傳入的下標(biāo)大于elementCount(即表示元素總數(shù)、又表示即將添加新元素的下標(biāo)),則證明不合理,此處會(huì)拋出IndexOutOfBoundsException()對(duì)象

2、創(chuàng)建ListItr對(duì)象

利用傳入的下標(biāo),將其傳入到ListItr的構(gòu)造方法中,創(chuàng)建一個(gè)指定從某個(gè)下標(biāo)處開(kāi)始的迭代器對(duì)象

3、返回迭代器對(duì)象ListItr

總結(jié)

迭代器操作,全部依賴(lài)Itr類(lèi)、以及ListItr類(lèi)產(chǎn)生的對(duì)象,真真的迭代器對(duì)象就是它們,所以下一篇將直接分析,Itr類(lèi)與ListItr類(lèi)的所有方法

以上就是基于java構(gòu)造方法Vector遍歷元素源碼分析的詳細(xì)內(nèi)容,更多關(guān)于java構(gòu)造方法Vector的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java?Stream對(duì)象并行處理方法parallel()代碼示例

    Java?Stream對(duì)象并行處理方法parallel()代碼示例

    在Java中Stream是一種用于處理集合數(shù)據(jù)的流式操作API,它提供了一種簡(jiǎn)潔、靈活、高效的方式來(lái)對(duì)集合進(jìn)行各種操作,下面這篇文章主要給大家介紹了關(guān)于Java?Stream對(duì)象并行處理方法parallel()的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • springboot工程如何使用阿里云OSS傳輸文件

    springboot工程如何使用阿里云OSS傳輸文件

    阿里云對(duì)象存儲(chǔ)OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù),多種存儲(chǔ)類(lèi)型供選擇,全面優(yōu)化存儲(chǔ)成本,非常適合存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù),本文給大家介紹springboot工程使用阿里云OSS傳輸文件的操作,感興趣的朋友一起看看吧
    2023-08-08
  • 整理很詳細(xì)的Java正則表達(dá)式使用大全

    整理很詳細(xì)的Java正則表達(dá)式使用大全

    這篇文章為大家整理了很詳細(xì)的Java正則表達(dá)式使用大全,大家在使用Java正則表達(dá)式的時(shí)候可查閱這篇文章,認(rèn)為不錯(cuò)的朋友可以收藏起來(lái)
    2015-12-12
  • mybatis3.3+struts2.3.24+mysql5.1.22開(kāi)發(fā)環(huán)境搭建圖文教程

    mybatis3.3+struts2.3.24+mysql5.1.22開(kāi)發(fā)環(huán)境搭建圖文教程

    這篇文章主要為大家詳細(xì)介紹了mybatis3.3+struts2.3.24+mysql5.1.22開(kāi)發(fā)環(huán)境搭建圖文教程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Mybatis自關(guān)聯(lián)查詢(xún)一對(duì)多查詢(xún)的實(shí)現(xiàn)示例

    Mybatis自關(guān)聯(lián)查詢(xún)一對(duì)多查詢(xún)的實(shí)現(xiàn)示例

    這篇文章主要介紹了Mybatis自關(guān)聯(lián)查詢(xún)一對(duì)多查詢(xún)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 關(guān)于文件合并與修改md5值的問(wèn)題

    關(guān)于文件合并與修改md5值的問(wèn)題

    這篇文章主要介紹了關(guān)于文件合并與修改md5值的問(wèn)題,使用本博客的方法,不僅僅可以修改md5值,還可以達(dá)到隱藏文件的目的,需要的朋友可以參考下
    2023-04-04
  • Java進(jìn)階之SPI機(jī)制詳解

    Java進(jìn)階之SPI機(jī)制詳解

    Java SPI機(jī)制在很多大型中間建碼,例如Dubbo中均有采用,屬于高級(jí)Java開(kāi)發(fā)的進(jìn)階必備知識(shí)點(diǎn),務(wù)必要求掌握.文中有非常詳細(xì)的代碼示例及解釋,需要的朋友可以參考下
    2021-05-05
  • java如何利用poi解析doc和docx中的數(shù)據(jù)

    java如何利用poi解析doc和docx中的數(shù)據(jù)

    這篇文章主要給大家介紹了關(guān)于java如何利用poi解析doc和docx中數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java中對(duì)象的銷(xiāo)毀方法分析

    Java中對(duì)象的銷(xiāo)毀方法分析

    這篇文章主要介紹了Java中對(duì)象的銷(xiāo)毀方法,較為詳細(xì)的分析了對(duì)象的功能、用法及銷(xiāo)毀對(duì)象對(duì)于程序運(yùn)行的益處,需要的朋友可以參考下
    2015-04-04
  • 如何使用Spring自定義Xml標(biāo)簽

    如何使用Spring自定義Xml標(biāo)簽

    要實(shí)現(xiàn)自定義的xml配置,需要有兩個(gè)默認(rèn)spring配置文件來(lái)支持。一個(gè)是spring.schemas,一個(gè)是spring.handlers,前者是為了驗(yàn)證你自定義的xml配置文件是否符合你的格式要求,后者是告訴spring該如何來(lái)解析你自定義的配置文件。本文將介紹如何使用Spring自定義Xml標(biāo)簽
    2021-06-06

最新評(píng)論

米林县| 德安县| 尉犁县| 青神县| 胶州市| 南华县| 屯留县| 延庆县| 井研县| 绥中县| 张北县| 普宁市| 定陶县| 阳山县| 抚顺市| 齐齐哈尔市| 铁岭市| 迁安市| 怀柔区| 崇文区| 柳江县| 泌阳县| 永春县| 高清| 中江县| 蒙城县| 江口县| 双鸭山市| 岱山县| 泽普县| 宜春市| 乐至县| 广宁县| 石棉县| 白河县| 乌审旗| 乌鲁木齐县| 开江县| 湖北省| 邵武市| 榕江县|