基于java構(gòu)造方法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ì)象鎖的線(xiàn)程才能執(zhí)行此方法
1、檢查下標(biāo)index是否合法
同樣當(dāng)index大于等于elementCount值,說(shuō)明不合法,此處會(huì)拋出ArrayIndexOutOfBoundsException對(duì)象,告知用戶(hù)錯(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()方法并沒(méi)有使用synchronized修飾
containsAll()方法分析
public synchronized boolean containsAll(Collection<?> c) { return super.containsAll(c); }
用于檢查是否包含某個(gè)指定的Collection中的所有元素的方法,依賴(lài)于父類(lèi)的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)開(kāi)始查找元素對(duì)象的下標(biāo)……
1、當(dāng)元素對(duì)象為null時(shí)
從指定的下標(biāo)index處開(kāi)始,遍歷到elementCount前的所有元素,如果與null相同,則返回下標(biāo)值
2、當(dāng)元素對(duì)象不是null時(shí)
使用對(duì)象的equals()方法進(jìn)行比較,當(dāng)相等時(shí),返回遍歷過(guò)程中的下標(biāo)值
3、如果沒(méi)有在指定范圍內(nèi)找到匹配的元素對(duì)象,則向調(diào)用者返回-1
lastIndexOf(Object)方法分析
public synchronized int lastIndexOf(Object o) { return lastIndexOf(o, elementCount-1); }
從最后一個(gè)元素開(kāi)始查找,一直到第一個(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ì)象鎖的線(xiàn)程,才能執(zhí)行該方法,傳入的參數(shù)index表示指定的下標(biāo)
1、檢查下標(biāo)是否合理
只有小于elementCount的下標(biāo)才是合法下標(biāo),其它情況會(huì)以ArrayIndexOutOfBoundsException告知調(diào)用者
2、查找到元素
這是通過(guò)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,說(shuō)明沒(méi)有元素,此時(shí)拋出NoSuchElementException對(duì)象
2、查找到具體的元素
同樣通過(guò)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的線(xiàn)程安全
1、檢查元素?cái)?shù)量
同樣為0,表示沒(méi)有元素,同樣拋出NoSuchElementException對(duì)象,以告知用戶(hù),并沒(méi)有元素
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、通過(guò)下標(biāo)訪(fǎng)問(wèn)數(shù)組中的元素
elementData是Vector對(duì)象持有的一個(gè)數(shù)組對(duì)象,該數(shù)組對(duì)象實(shí)際負(fù)責(zé)保存元素對(duì)象(引用),所以只需通過(guò)下標(biāo)訪(fǎng)問(wèn)elementData中的元素即可
2、向調(diào)用者返回元素對(duì)象
總結(jié)
查找元素功能經(jīng)常使用,當(dāng)然實(shí)際訪(fǎng)問(wèn)的是還是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)文章
Java中final,finally,finalize三個(gè)關(guān)鍵字的區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章給大家收集整理了有關(guān)java中final,finally,finalize三個(gè)關(guān)鍵字的區(qū)別介紹,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-04-04EasyUi+Spring Data 實(shí)現(xiàn)按條件分頁(yè)查詢(xún)的實(shí)例代碼
這篇文章主要介紹了EasyUi+Spring Data 實(shí)現(xiàn)按條件分頁(yè)查詢(xún)的實(shí)例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-07-07springboot內(nèi)置tomcat調(diào)優(yōu)并發(fā)線(xiàn)程數(shù)解析
這篇文章主要介紹了springboot內(nèi)置tomcat調(diào)優(yōu)并發(fā)線(xiàn)程數(shù)解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12spring配置定時(shí)任務(wù)的幾種方式總結(jié)
這篇文章主要介紹了spring配置定時(shí)任務(wù)的幾種方式總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12idea中mapper如何快速跳轉(zhuǎn)到xml插件
這篇文章主要介紹了idea中mapper如何快速跳轉(zhuǎn)到xml插件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05詳解Spring-Boot集成Spring session并存入redis
這篇文章主要介紹了詳解Spring-Boot集成Spring session并存入redis,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05