欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的Vector和Stack底層源碼分析

 更新時(shí)間:2023年12月15日 08:53:10   作者:愛喝咖啡的程序員  
這篇文章主要介紹了Java中的Vector和Stack底層源碼分析,Stack繼承了Vector,Vector底層還是一個(gè)List,也就是基于數(shù)組來(lái)實(shí)現(xiàn)的,所以ArrayList有的優(yōu)點(diǎn),比如獲取元素的速度快,隨機(jī)讀,它都有,需要的朋友可以參考下

一. 基本原理和優(yōu)缺點(diǎn)

Stack繼承了Vector,Vector底層還是一個(gè)List,也就是基于數(shù)組來(lái)實(shí)現(xiàn)的,所以ArrayList有的優(yōu)點(diǎn),比如獲取元素的速度快,隨機(jī)讀,它都有,與此相對(duì)的,ArrayList的缺點(diǎn),比如從中間插入一個(gè)元素,從中間刪除一個(gè)元素,Stack也存在。

但是呢,Stack使用最多的方法就是push和pop,換句話說(shuō),Stack的作者并非希望我們把使用ArrayList的那一套,直接放到Stack上做。

如果嚴(yán)格按照push和pop來(lái)執(zhí)行,就可以避免中間操作元素時(shí),產(chǎn)生移動(dòng)元素的后果了。當(dāng)然了,頻繁向Stack push元素,仍然可能導(dǎo)致擴(kuò)容。

棧和隊(duì)列(LinkedList)的實(shí)現(xiàn)有所不同,棧是"后進(jìn)先出",而隊(duì)列是"尾進(jìn)頭出"。

二. 源碼分析

2.1 push

Stack底層與ArrayList非常相似,存儲(chǔ)數(shù)據(jù)的容器是數(shù)組。

public E push(E item) {
	addElement(item);
	return item;
}
public synchronized void addElement(E obj) {
	modCount++;
	ensureCapacityHelper(elementCount + 1);
	elementData[elementCount++] = obj;
}
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);
}

代碼邏輯與ArrayList基本上一樣。

首先,判斷新增一個(gè)元素后,當(dāng)前的容器能否放得下這么多數(shù)據(jù),如果放不下,就要進(jìn)行擴(kuò)容。擴(kuò)容無(wú)外乎就是在原有容器的基礎(chǔ)上,擴(kuò)大成1.5倍,如果還是放不下元素,則按照能夠容納新元素的最小大小,作為新容器的大小。只要涉及到擴(kuò)容,肯定就會(huì)使用Arrays.copyOf()。

接著,就是往指定下標(biāo)的位置,加入新元素。

2.2 pop

彈出棧頂元素。

public synchronized E pop() {
	E       obj;
	int     len = size();
	obj = peek();
	removeElementAt(len - 1);
	return obj;
}

所謂的棧頂元素,不就是當(dāng)前數(shù)組中最后一個(gè)元素么,它的下標(biāo)就是size-1,所以取出來(lái)就好啦。

三. 總結(jié)

Stack這個(gè)數(shù)據(jù)結(jié)構(gòu)非常的簡(jiǎn)單,只要看過(guò)ArrayList的源碼,再看Stack,2分鐘就看完了。

使用棧時(shí),用的最多的就是它"后進(jìn)先出"的數(shù)據(jù)結(jié)構(gòu)了。

到此這篇關(guān)于Java中的Vector和Stack底層源碼分析的文章就介紹到這了,更多相關(guān)Vector和Stack底層源碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java util concurrent及基本線程原理簡(jiǎn)介

    Java util concurrent及基本線程原理簡(jiǎn)介

    這篇文章主要介紹了Java util concurrent及基本線程原理簡(jiǎn)介,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 淺談Mybatis傳參類型如何確定

    淺談Mybatis傳參類型如何確定

    最近有小伙伴在討論#{}與${}的區(qū)別時(shí),有提到#{}是用字符串進(jìn)行替換,本文主要介紹了mapper接口中不同的參數(shù)類型,最終拼接sql中是如何進(jìn)行替換的,感興趣的可以了解一下
    2021-10-10
  • Java實(shí)現(xiàn)異步延遲隊(duì)列的方法詳解

    Java實(shí)現(xiàn)異步延遲隊(duì)列的方法詳解

    目前系統(tǒng)中有很多需要用到延時(shí)處理的功能,本文就為大家介紹了Java實(shí)現(xiàn)異步延遲隊(duì)列的方法,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2023-03-03
  • java JTree JCheckBox樹復(fù)選框詳解

    java JTree JCheckBox樹復(fù)選框詳解

    這篇文章主要為大家詳細(xì)介紹了java JTree JCheckBox樹復(fù)選框的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • springboot配置https安全連接的方法

    springboot配置https安全連接的方法

    這篇文章主要介紹了springboot配置https安全連接的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • SpringBoot框架打包體積簡(jiǎn)化過(guò)程圖解

    SpringBoot框架打包體積簡(jiǎn)化過(guò)程圖解

    這篇文章主要介紹了SpringBoot框架打包體積簡(jiǎn)化過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • SpringCache緩存抽象之CacheManager與自定義鍵生成方式

    SpringCache緩存抽象之CacheManager與自定義鍵生成方式

    本文將深入探討Spring Cache的核心組件CacheManager及自定義鍵生成策略,幫助開發(fā)者掌握緩存配置與優(yōu)化技巧,從而構(gòu)建高效可靠的緩存系統(tǒng),希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Java基于代理模式解決紅酒經(jīng)銷問(wèn)題詳解

    Java基于代理模式解決紅酒經(jīng)銷問(wèn)題詳解

    這篇文章主要介紹了Java基于代理模式解決紅酒經(jīng)銷問(wèn)題,詳細(xì)描述了代理模式的概念、原理并結(jié)合實(shí)例形式分析了java基于代理模式解決紅酒經(jīng)銷問(wèn)題的相關(guān)步驟、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
    2018-04-04
  • SpringBoot?自定義starter?yaml提示失效問(wèn)題及解決方法

    SpringBoot?自定義starter?yaml提示失效問(wèn)題及解決方法

    在自定義starter后,必不可少會(huì)有properties配置參數(shù)需要指定,而在有時(shí)又不知道為什么出現(xiàn)這個(gè)問(wèn)題,這篇文章主要介紹了SpringBoot?自定義starter?yaml提示失效問(wèn)題,需要的朋友可以參考下
    2022-12-12
  • Java中如何利用Set判斷List集合中是否有重復(fù)元素

    Java中如何利用Set判斷List集合中是否有重復(fù)元素

    在開發(fā)工作中,我們有時(shí)需要去判斷List集合中是否含有重復(fù)的元素,這時(shí)候我們不需要找出重復(fù)的元素,我們只需要返回一個(gè)?Boolean?類型就可以了,下面通過(guò)本文給大家介紹Java中利用Set判斷List集合中是否有重復(fù)元素,需要的朋友可以參考下
    2023-05-05

最新評(píng)論