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

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

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

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

前言

元素在存儲(chǔ)到內(nèi)存中,當(dāng)我們需要使用在內(nèi)存中存儲(chǔ)的元素,這就涉及到在內(nèi)存中查找元素,今天一起學(xué)習(xí)Vector提供了哪些查找元素的方法

包括有獲取一個(gè)元素的方法,查找元素的下標(biāo)的方法,檢查是否包含某個(gè)元素的方法,一起逐個(gè)學(xué)習(xí)一下吧……(本文不涉及迭代器中的查找元素,以及遍歷元素,迭代器將在單獨(dú)的文章中總結(jié))

get(int)方法分析

    public synchronized E get(int index) {
        if (index >= elementCount)
            throw new ArrayIndexOutOfBoundsException(index);
 
        return elementData(index);
    }

用于獲取指定下標(biāo)處的元素對(duì)象,傳入的參數(shù)index表示指定的下標(biāo),當(dāng)然只有獲得對(duì)象鎖的線程才能執(zhí)行此方法

1、檢查下標(biāo)index是否合法

同樣當(dāng)index大于等于elementCount值,說明不合法,此處會(huì)拋出ArrayIndexOutOfBoundsException對(duì)象,告知用戶錯(cuò)誤原因,elementCount在Vector中有兩個(gè)作用,一個(gè)是作為即將添加的下標(biāo),另外一個(gè)是作為Vector對(duì)象實(shí)際持有的元素總數(shù)

2、獲取元素

獲取元素仍然使用的是elementData()方法,它可以返回某個(gè)下標(biāo)處的元素對(duì)象

3、向調(diào)用者返回元素對(duì)象

contains(Object)方法分析

    public boolean contains(Object o) {
        return indexOf(o, 0) >= 0;
    }

用于檢查Vector中是否存在某個(gè)元素對(duì)象

1、先調(diào)用indexOf()方法獲取到某個(gè)元素的下標(biāo)

2、比較獲取到的元素是否大于等于0,如果元素存在,indexOf()一定會(huì)返回一個(gè)大于等于0的數(shù)字

3、將比較結(jié)果返回給調(diào)用者

如果你留心,你會(huì)發(fā)現(xiàn)contains()方法并沒有使用synchronized修飾

containsAll()方法分析

    public synchronized boolean containsAll(Collection<?> c) {
        return super.containsAll(c);
    }

用于檢查是否包含某個(gè)指定的Collection中的所有元素的方法,依賴于父類的containsAll()方法

indexOf(Object)方法分析

    public int indexOf(Object o) {
        return indexOf(o, 0);
    }

用于檢查某個(gè)元素對(duì)象在Vector對(duì)象持有的數(shù)組對(duì)象中的下標(biāo),傳入?yún)?shù)o為元素對(duì)象

1、實(shí)際調(diào)用另一個(gè)重載的indexOf()方法

2、向調(diào)用者返回結(jié)果,即元素的下標(biāo)

indexOf(Object,index)方法分析

    public synchronized int indexOf(Object o, int index) {
        if (o == null) {
            for (int i = index ; i < elementCount ; i++)
                if (elementData[i]==null)
                    return i;
        } else {
            for (int i = index ; i < elementCount ; i++)
                if (o.equals(elementData[i]))
                    return i;
        }
        return -1;
    }

用于獲得元素的下標(biāo),第一個(gè)參數(shù)o表示查找的元素對(duì)象,第二個(gè)參數(shù)index表示從哪個(gè)下標(biāo)開始查找元素對(duì)象的下標(biāo)……

1、當(dāng)元素對(duì)象為null時(shí)

從指定的下標(biāo)index處開始,遍歷到elementCount前的所有元素,如果與null相同,則返回下標(biāo)值

2、當(dāng)元素對(duì)象不是null時(shí)

使用對(duì)象的equals()方法進(jìn)行比較,當(dāng)相等時(shí),返回遍歷過程中的下標(biāo)值

3、如果沒有在指定范圍內(nèi)找到匹配的元素對(duì)象,則向調(diào)用者返回-1

lastIndexOf(Object)方法分析

    public synchronized int lastIndexOf(Object o) {
        return lastIndexOf(o, elementCount-1);
    }

從最后一個(gè)元素開始查找,一直到第一個(gè)元素,同樣返回元素對(duì)象的下標(biāo)

1、實(shí)際調(diào)用重載的lastIndexOf(Object,int)方法

2、向調(diào)用者返回元素的下標(biāo)

elementAt(int)方法分析

    public synchronized E elementAt(int index) {
        if (index >= elementCount) {
            throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount);
        }
 
        return elementData(index);
    }

用于查找某個(gè)下標(biāo)處的元素,synchronized修飾,同一時(shí)刻只有獲得對(duì)象鎖的線程,才能執(zhí)行該方法,傳入的參數(shù)index表示指定的下標(biāo)

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

只有小于elementCount的下標(biāo)才是合法下標(biāo),其它情況會(huì)以ArrayIndexOutOfBoundsException告知調(diào)用者

2、查找到元素

這是通過elementData()方法實(shí)現(xiàn)的

3、向調(diào)用者返回元素對(duì)象

firstElement()方法分析

    public synchronized E firstElement() {
        if (elementCount == 0) {
            throw new NoSuchElementException();
        }
        return elementData(0);
    }

用于查找Vector中存儲(chǔ)的第一個(gè)元素

1、檢查元素?cái)?shù)量

當(dāng)elementCount等于0,說明沒有元素,此時(shí)拋出NoSuchElementException對(duì)象

2、查找到具體的元素

同樣通過elementData()方法獲取到,elementData()方法接受的參數(shù)為元素下標(biāo)值

3、向調(diào)用者返回元素對(duì)象

lastElement()方法分析

    public synchronized E lastElement() {
        if (elementCount == 0) {
            throw new NoSuchElementException();
        }
        return elementData(elementCount - 1);
    }

用于返回Vector中存儲(chǔ)的最后一個(gè)元素,同步方法,保證共享變量elementData、elementCount的線程安全

1、檢查元素?cái)?shù)量

同樣為0,表示沒有元素,同樣拋出NoSuchElementException對(duì)象,以告知用戶,并沒有元素

2、查找到最后一個(gè)元素

使用elementData()方法,只需傳入最后一個(gè)元素的下標(biāo)值即可,elementCount - 1 即為最后一個(gè)元素的下標(biāo)

3、向調(diào)用者返回元素對(duì)象

elementData(int)方法分析

    E elementData(int index) {
        return (E) elementData[index];
    }

用于返回指定下標(biāo)處的元素對(duì)象,傳入?yún)?shù)為int,表示下標(biāo)

1、通過下標(biāo)訪問數(shù)組中的元素

elementData是Vector對(duì)象持有的一個(gè)數(shù)組對(duì)象,該數(shù)組對(duì)象實(shí)際負(fù)責(zé)保存元素對(duì)象(引用),所以只需通過下標(biāo)訪問elementData中的元素即可

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

總結(jié)

查找元素功能經(jīng)常使用,當(dāng)然實(shí)際訪問的是還是Vector對(duì)象持有的elementData數(shù)組對(duì)象

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

相關(guān)文章

  • Netty解決半包和粘包問題的方案

    Netty解決半包和粘包問題的方案

    Netty 是一個(gè)高性能、異步事件驅(qū)動(dòng)的網(wǎng)絡(luò)應(yīng)用框架,廣泛應(yīng)用于各種網(wǎng)絡(luò)通信場(chǎng)景,這篇文章,我們將詳細(xì)分析 Netty 是如何解決半包和粘包問題,文中通過代碼示介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • Java FileInputStream讀中文亂碼問題解決方案

    Java FileInputStream讀中文亂碼問題解決方案

    這篇文章主要介紹了Java FileInputStream讀中文亂碼問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • java return用法實(shí)例詳解

    java return用法實(shí)例詳解

    在本篇文章里小編給大家整理的是關(guān)于java return用法以及相關(guān)知識(shí)點(diǎn)總結(jié),需要的朋友們參考下。
    2019-08-08
  • SpringBoot整合Sa-Token實(shí)現(xiàn)?API?接口簽名安全校驗(yàn)功能

    SpringBoot整合Sa-Token實(shí)現(xiàn)?API?接口簽名安全校驗(yàn)功能

    這篇文章主要介紹了SpringBoot整合Sa-Token實(shí)現(xiàn)?API?接口簽名安全校驗(yàn)功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • java動(dòng)態(tài)構(gòu)建數(shù)據(jù)庫(kù)復(fù)雜查詢教程

    java動(dòng)態(tài)構(gòu)建數(shù)據(jù)庫(kù)復(fù)雜查詢教程

    這篇文章主要介紹了java動(dòng)態(tài)構(gòu)建數(shù)據(jù)庫(kù)復(fù)雜查詢的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • Java對(duì)象流實(shí)例代碼

    Java對(duì)象流實(shí)例代碼

    這篇文章主要介紹了Java對(duì)象流實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 詳解如何保護(hù)SpringBoot配置文件中的敏感信息

    詳解如何保護(hù)SpringBoot配置文件中的敏感信息

    使用過SpringBoot配置文件的朋友都知道,資源文件中的內(nèi)容通常情況下是明文顯示,安全性就比較低一些,所以為了提高安全性,就需要對(duì)配置文件中的敏感信息進(jìn)行保護(hù),下面就為大家介紹一下實(shí)現(xiàn)方法吧
    2023-07-07
  • springboot整合mybatisplus的方法詳解

    springboot整合mybatisplus的方法詳解

    這篇文章主要為大家詳細(xì)介紹了springboot整合mybatisplus的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java如何導(dǎo)入Jsoup庫(kù)做一個(gè)有趣的爬蟲項(xiàng)目

    Java如何導(dǎo)入Jsoup庫(kù)做一個(gè)有趣的爬蟲項(xiàng)目

    Jsoup庫(kù)是一款Java的HTML解析器,可用于從網(wǎng)絡(luò)或本地文件中獲取HTML文檔并解析其中的數(shù)據(jù),這篇文章給大家介紹Java導(dǎo)入Jsoup庫(kù)做一個(gè)有趣的爬蟲項(xiàng)目,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • @Transactional遇到try catch失效的問題

    @Transactional遇到try catch失效的問題

    這篇文章主要介紹了@Transactional遇到try catch失效的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評(píng)論

特克斯县| SHOW| 襄城县| 成都市| 北流市| 宜州市| 阿巴嘎旗| 新密市| 晋中市| 隆子县| 惠水县| 峨眉山市| 东城区| 外汇| 克什克腾旗| 怀仁县| 蒙阴县| 乌鲁木齐市| 白城市| 新乡市| 灌阳县| 蒙山县| 翁源县| 安化县| 平山县| 丰都县| 吉首市| 平顶山市| 额尔古纳市| 揭阳市| 遵义县| 白沙| 信阳市| 洱源县| 邓州市| 兴义市| 红河县| 伊吾县| 壤塘县| 新巴尔虎右旗| 台安县|