Collection和Collections的區別?

在開始學習棧之前,先來解決一下之前一個網友在評論區問的問題:

Collection和Collections有什么區別?

雖然這兩個類都在java.util包下,雖然只有一字之差,但它們的差別還是挺大的!

Collection 是JDK中集合層次結構中的最根本的接口。定義了集合類的基本方法。源碼中的解釋:

* The rootinterfaceinthe collection hierarchy.? A collection

* represents a group of objects, known as its <i>elements</i>.? Some

* collections allow duplicate elements and othersdonot.? Some are ordered

* and others unordered.? The JDK does not provide any <i>direct</i>

* implementations ofthisinterface: it provides implementations of more

* specific subinterfaces like <tt>Set</tt> and <tt>List</tt>.? This interface

* is typically used to pass collections around and manipulate them where

* maximum generality is desired.

Collections 是一個包裝類。它包含有各種有關集合操作的靜態多態方法,不能實例化,Collection 集合框架的工具類。源碼中的解釋:

* Thisclassconsistsexclusively ofstaticmethods that operate on orreturn

* collections.? It contains polymorphic algorithms that operate on

* collections,"wrappers", whichreturnanewcollectionbacked by a

* specified collection, and a few other odds and ends.

stack(棧)

棧(stack)是一種先進后出(Last In First Out,LIFO)的數據結構,類比于現實生活中的子彈上膛、泡泡圈。棧具有兩個基本操作:入棧(push)和出棧(pop)。入棧表示將元素放入棧頂,而出棧表示從棧頂取出元素。

動圖圖解-入棧(push)

動圖圖解-出棧(pop)

在Java的工具包中其實幫我們封裝好了一個類,java.util.Stack,它所提供的方法并不多,我們通過一個小示例感受一下。

【代碼示例1】

Stack stacks =newStack<>();

//push方法入棧

stacks.push("開");

stacks.push("工");

stacks.push("大");

stacks.push("吉");

stacks.push("!");

System.out.println(stacks);

//pop棧頂元素出棧

Stringpop=stacks.pop();

System.out.println(pop);

//查看棧頂元素

Stringpeek=stacks.peek();

System.out.println(peek);

//判斷堆棧是否為空

booleanempty=stacks.empty();

System.out.println(empty);

//查看元素在堆棧中的位置

intindex=stacks.search("開");

System.out.println(index);

輸出:

[開, 工, 大, 吉, !]

false

4

手寫一個stack(堆棧)

通過上面的代碼示例我們了解了一個棧所具備的功能特點,根據它的特點,我們嘗試一下手寫一個棧!

首先,準備一個數組用來存儲元素,可以定義為Object,這樣支持多數據類型,我們這里直接選用int類型的好嘞。

自定義棧-源碼:

/**

*@ClassNameStack

*@Description手寫一個int類型的堆棧

*@Authorhzm

*@Date2024/2/18 14:21

*@Version1.0

*/

publicclassStack{

privateintarr[];

privateinttop;

privateintcapacity;

/**

? ? * 提供一個有參構造,初始化棧

*@paramsize

? ? */

publicStack(intsize){

this.arr =newint[size];

this.top = -1;

this.capacity = size;

? ? }

/**

? ? * 入棧

*@paramp

? ? */

publicvoidpush(intp){

if(isFull()) {

System.out.println("堆棧空間溢出\n程序終止\n");

System.exit(1);

? ? ? ? }

System.out.println("入棧:"+ p);

? ? ? ? arr[++top] = p;

? ? }

/**

? ? * 出棧

*@return

? ? */

publicintpop(){

if(isEmpty()) {

System.out.println("空棧,不可POP");

System.exit(1);

? ? ? ? }

returnarr[top--];

? ? }

/**

? ? * 判斷棧是否已滿

*@return

? ? */

publicBooleanisFull(){

returntop== capacity -1;

? ? }

/**

? ? * 判斷棧是否為空

*@return

? ? */

publicBooleanisEmpty(){

returntop== -1;

? ? }

/**

? ? * 遍歷棧內元素

? ? */

publicvoidprintStack(){

for(inti=0; i <= top; i++) {

? ? ? ? ? ? System.out.println(arr[i]);

? ? ? ? }

? ? }

/**

? ? * 返回棧的大小

*@return

? ? */

publicintsize(){

returntop +1;

? ? }

/**

? ? * 查看棧頂元素

*@return

? ? */

publicvoidpeek(){

System.out.println("棧頂元素:"+ arr[top]);

? ? }

}

測試類中調用手寫的這個stack:

publicclassTest{

publicstaticvoidmain(String[] args){

Stackstack=newStack(5);

//入棧

stack.push(1);

stack.push(2);

stack.push(3);

stack.push(4);

stack.push(5);

//出棧

intpop=stack.pop();

System.out.println("出棧:"+ pop);

//查看棧的大小

intsize=stack.size();

System.out.println("棧容量:"+ size);

//查看棧頂元素

? ? ? ? stack.peek();

//打印棧內元素

? ? ? ? stack.printStack();

? ? }

}

輸出:

散熱風扇https://www.uv-semi.com/

深圳網站建設www.sz886.com

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內容