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

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

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

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

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

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

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

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

二. 源碼分析

2.1 push

Stack底層與ArrayList非常相似,存儲數(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基本上一樣。

首先,判斷新增一個元素后,當(dāng)前的容器能否放得下這么多數(shù)據(jù),如果放不下,就要進(jìn)行擴容。擴容無外乎就是在原有容器的基礎(chǔ)上,擴大成1.5倍,如果還是放不下元素,則按照能夠容納新元素的最小大小,作為新容器的大小。只要涉及到擴容,肯定就會使用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ù)組中最后一個元素么,它的下標(biāo)就是size-1,所以取出來就好啦。

三. 總結(jié)

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

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

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

相關(guān)文章

  • SpringBoot Druid配置過程圖解

    SpringBoot Druid配置過程圖解

    這篇文章主要介紹了SpringBoot Druid配置過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Jmeter分布式壓力測試實現(xiàn)過程詳解

    Jmeter分布式壓力測試實現(xiàn)過程詳解

    這篇文章主要介紹了Jmeter分布式壓力測試實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • java eclipse 整個項目或包查找只定字符串并替換操作

    java eclipse 整個項目或包查找只定字符串并替換操作

    這篇文章主要介紹了java eclipse 整個項目或包查找只定字符串并替換操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • idea 創(chuàng)建 maven web 工程流程(圖文教程)

    idea 創(chuàng)建 maven web 工程流程(圖文教程)

    這篇文章主要介紹了idea 創(chuàng)建 maven web 工程流程(圖文教程),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • SpringBoot任務(wù)之詳解郵件任務(wù)

    SpringBoot任務(wù)之詳解郵件任務(wù)

    今天給大家整理的文章是SpringBoot郵件任務(wù)的相關(guān)知識點,文中有非常詳細(xì)的介紹及代碼示例,對正在學(xué)習(xí)SpringBoot任務(wù)的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • java當(dāng)中的定時器的4種使用方式

    java當(dāng)中的定時器的4種使用方式

    這篇文章主要介紹了java當(dāng)中的定時器的4種使用方式,有需要的朋友可以參考一下
    2013-12-12
  • Java的動態(tài)代理模式之JDK代理詳解

    Java的動態(tài)代理模式之JDK代理詳解

    這篇文章主要介紹了Java的動態(tài)代理模式之JDK代理詳解,代理對象,不需要實現(xiàn)接口,但是目標(biāo)對象要實現(xiàn)接口,否則不能用動態(tài)代理,JDK?實現(xiàn)代理只需要使用?newProxyInstance?方法,但是該方法需要接收三個參數(shù),需要的朋友可以參考下
    2023-11-11
  • Shiro+SpringBoot時,anon配置的匿名路徑被攔截,自定義配置類走過的坑及解決

    Shiro+SpringBoot時,anon配置的匿名路徑被攔截,自定義配置類走過的坑及解決

    文章主要講述了在Java配置類中使用`@Configuration`注解的重要性,并通過修改Shiro配置時遇到的問題,強調(diào)了使用`LinkedHashMap`而不是`HashMap`的原因,同時,文章還提供了一些面試題和總結(jié),幫助讀者更好地理解和應(yīng)用這些知識
    2026-03-03
  • Struts2訪問Servlet的三種方式

    Struts2訪問Servlet的三種方式

    這篇文章主要介紹了Struts2訪問Servlet的三種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • JAVA通過Filter實現(xiàn)允許服務(wù)跨域請求的方法

    JAVA通過Filter實現(xiàn)允許服務(wù)跨域請求的方法

    這里的域指的是這樣的一個概念:我們認(rèn)為若協(xié)議 + 域名 + 端口號均相同,那么就是同域即我們常說的瀏覽器請求的同源策略。這篇文章主要介紹了JAVA通過Filter實現(xiàn)允許服務(wù)跨域請求,需要的朋友可以參考下
    2018-11-11

最新評論

兖州市| 卢氏县| 屯门区| 华阴市| 浦县| 巴彦淖尔市| 尉犁县| 宝兴县| 霞浦县| 濮阳市| 武乡县| 宁晋县| 洛阳市| 渑池县| 遂川县| 宽甸| 格尔木市| 且末县| 吉木萨尔县| 苍山县| 长宁县| 醴陵市| 锡林浩特市| 喀喇| 隆昌县| 科技| 象山县| 探索| 许昌市| 高邑县| 沐川县| 淅川县| 顺义区| 乐昌市| 金门县| 鸡泽县| 郸城县| 扬中市| 黄浦区| 沅江市| 叶城县|