日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java解析java源码_JAVA语言-Java源码解析-Stack源码分析

發布時間:2023/12/2 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java解析java源码_JAVA语言-Java源码解析-Stack源码分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、簡介

stack類圖.png

棧是數據結構中一種很重要的數據結構類型,因為棧的后進先出功能是實際的開發中有很多的應用場景。Java API中提供了棧(Stacck)的實現。Stack類繼承了Vector類,而Vector類繼承了AbstractList抽象類,實現了List類,Cloneable接口,RandomAcces接口以及Serializable接口。

二、源碼閱讀

1.構造方法public?Stack()?{

}

創建一個空棧。

2.入棧pushpublic?E?push(E?item)?{

addElement(item);

return?item;

}

public?synchronized?void?addElement(E?obj)?{

modCount++;

ensureCapacityHelper(elementCount?+?1);

elementData[elementCount++]?=?obj;

}

入棧是一個同步的方法,調用Vector的addElement方法,也是一個同步方法,先將修改次數加一,之后調用ensureCapacityHelper確認數組有足夠的空間能夠容納新的元素。最后將元素新增到數組,即Vector的末尾。

3.出棧poppublic?synchronized?E?pop()?{

E???????obj;

int?????len?=?size();

obj?=?peek();

removeElementAt(len?-?1);

return?obj;

}

出棧同樣是一個同步方法,先定義一個泛型對象obj,獲取到數組長度len,然后調用peek()方法,獲取棧頂的元素賦值給obj,然后刪除棧頂元素。public?synchronized?E?peek()?{

int?????len?=?size();

if?(len?==?0)

throw?new?EmptyStackException();

return?elementAt(len?-?1);

}

很顯然,peek()方法直接調用了Vector的elementAt方法,該方法不刪除棧頂的元素。

4.判斷棧是否為空/**

*?通過數組長度判斷棧是否為空。

*

*?@return??true?if?and?only?if?this?stack?contains

*??????????no?items;?false?otherwise.

*/public?boolean?empty()?{

return?size()?==?0;

}

5.查詢元素到棧頂的距離/**

*?Returns?the?1-based?position?where?an?object?is?on?this?stack.

*?If?the?object?o?occurs?as?an?item?in?this?stack,?this

*?method?returns?the?distance?from?the?top?of?the?stack?of?the

*?occurrence?nearest?the?top?of?the?stack;?the?topmost?item?on?the

*?stack?is?considered?to?be?at?distance?1.?The?equals?*?method?is?used?to?compare?o?to?the

*?items?in?this?stack.

*

*?@param???o???the?desired?object.

*?@return??the?1-based?position?from?the?top?of?the?stack?where

*??????????the?object?is?located;?the?return?value?-1?*??????????indicates?that?the?object?is?not?on?the?stack.

*/public?synchronized?int?search(Object?o)?{

int?i?=?lastIndexOf(o);

if?(i?>=?0)?{

return?size()?-?i;

}

return?-1;

}

一個同步方法,找到指定元素o到棧頂的距離,可以看到用到了lastIndexOf方法,如果找不到元素,則返回-1。

三、總計

通過源碼我們可以看到Vector底層是一個數組,說明Stack的實現是通過數組來實現的,然后通過對數組的操作來模仿棧的各種功能。而且在源碼中Vector的很多方法都是synchronized 的,也就是說是線程安全,所以說在多線程中是可以安全使用的,不過這樣效率上肯定是會降低的。

本文由職坐標整理并發布,希望對同學們有所幫助。了解更多詳情請關注職坐標編程語言JAVA頻道

總結

以上是生活随笔為你收集整理的java解析java源码_JAVA语言-Java源码解析-Stack源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产人妻人伦精品1国产 | 欧美三级一区二区三区 | 97av在线视频 | 久久久久精彩视频 | 久草小说| 亚洲国产清纯 | 国产综合在线视频 | 国产午夜大地久久 | 久久精品影视 | caoporn免费在线视频 | 国产情侣酒店自拍 | 一区二区三区网 | 神马午夜久久 | www.日本在线观看 | 国产资源久久 | 美女视频黄色在线观看 | 日韩免费视频一区二区 | 国产精品无码网站 | 少妇综合 | 欧美日韩中文在线观看 | 能看的毛片| 人人草人| 国产精品成人久久久 | 在线观看视频中文字幕 | 色妞网| 8090av | 都市激情一区 | 欧美激情久久久久久 | 国产精品一级 | 毛片在线免费观看网址 | 亚洲免费中文字幕 | 一区二区三区www污污污网站 | 丝袜国产在线 | 三级黄色小视频 | 天天看毛片 | 亚洲高清不卡 | 看黄色a级片 | 伊人久久视频 | 亚洲色成人一区二区三区小说 | 免费av一级| 日本啪啪啪一区二区 | 色干网| 精品无码久久久久久久久 | 又大又长粗又爽又黄少妇视频 | 亚洲国产精品久久久久久久 | 欧美巨鞭大战丰满少妇 | 一级全黄裸体免费观看视频 | 亚洲综合激情 | 亚洲成人aaa | 97人妻精品一区二区三区免费 | 欧美精品一区二区久久婷婷 | 欧美色哟哟 | 色香蕉影院 | 超碰成人av| 国产aⅴ激情无码久久久无码 | 国产麻豆成人传媒免费观看 | 天堂在线免费视频 | 亚洲美女综合 | 狼人综合av | 亚洲情热 | 看国产毛片| 日噜| 亚洲福利在线视频 | 99久久伊人 | 日韩aaaaaa| 成人性生生活性生交全黄 | 最新中文字幕久久 | 免费在线看污片 | 牛牛热在线视频 | 亚洲熟妇无码一区二区三区导航 | 超碰成人免费 | 国产成人一区二区三区 | 国产又粗又猛又爽又黄又 | 美女扒开内看个够网站 | 琪琪伦伦影院理论片 | 国产免费色视频 | 亚洲第八页| 亚洲激情久久 | 国产免费视频一区二区三区 | 亚洲jizzjizz | 超级黄色录像 | 亚洲国产毛片aaaaa无费看 | 美女脱了裤子让男人桶 | 国产成人精品一区二区在线观看 | 久久久www免费人成人片 | 香蕉视频官网在线观看 | 91福利视频在线观看 | 国产88av | 国产精品一区二区三区在线免费观看 | 少妇高潮一区二区三区99小说 | 妞干网这里只有精品 | 免费在线看污片 | 午夜精品久久久久久久99黑人 | 岛国一区| 亚洲网av| 91精品久久人妻一区二区夜夜夜 | 少妇姐姐 | 久久久久久久久国产精品 | 伊人黄色片 |