Stack集合與枚舉、泛型

Stack集合:

Stack是堆棧結構的集合,Stack集合是繼承於Vector集合的子類,這個集合的特點是後進先出的堆棧結構。Stack提供5個額外的方法使得Vector得以被當做堆棧使用。基本的方法有pushpop方法,還有peek得到棧頂的元素,empty方法是測試堆棧是否爲空,search方法檢測一個元素在堆棧中的位置。Stack剛剛創建的時候是空棧。

 

push方法:

push是進棧方法,就像add方法一樣,把元素添加進去,不同的是push更像是壓×××一般,先壓進去的最後面纔打出,後壓進去的最先打出。也就是先進的後出,後進的先出的特點。

 

棧示意圖:


a0f87c65463e646734e82ab448e2849a.png


代碼示例:

31470ff5583c1fb5e36cca5baa7d5370.png



peek方法:

peek方法可以得到棧頂的元素,也就是最後進棧的那個元素,在出棧時可以利用這個方法得知下一個要出棧的對象,因爲每出棧一個元素,下一個元素就是棧頂。

代碼示例:

ebfa818c6f862ab58ee40dc4e091e0cd.png


運行結果:

8cc395ff9931efe52d6adde19e9c29c5.png


pop方法:

pop是出棧方法,元素出棧後直接就沒了,等於從棧裏移出去了,使用size可以得到這個集合的大小,所以可以做個試驗,將所有的元素出棧後再打印集合的大小。

代碼示例:

2a6a3f621397740ebb1a393ddcfdd25f.png



運行結果:

d11859ed8c0e8b8585d4aff68b0a34ef.png



利用peek方法獲知每一次將要出棧的元素:

代碼示例:

be7cf37b332bb61404914f0cc176de06.png


運行結果:

758cec82df755c3900854e2f92a48107.png

從運行的結果也看得出來堆棧:先進的後出,後進的先出的特點




使用Stack集合寫一個加法運算:

e554d6da8ccf8e6d6e9433920184f053.png

  這是在平時最經常用到也是最簡單的一種計算加法的方式,使用Stack集合就可以實現這樣的一種算法。



代碼邏輯:

 

先以字符串的形式申請兩個需要計算的數字,然後分別轉換成char數組。接着分別構建兩個Stack集合對象,再使用兩個循環將兩組char數組裏的元素分別壓進兩個棧中。聲明一個int變量來儲存兩個棧中大小最大的那個棧的size,構建一個StringBuffer對象來作爲累計結果使用。

再聲明一個int變量來記錄進位,使用一個循環遍歷棧中的元素,在循環裏申請兩個變量來記錄每次出棧的數字,還需要將每次出棧的數字分別轉換成整數類型,然後再存放到事先申請的兩個變量中。

接着將兩個數字和進位相加,再判斷相加後的值是否大於等於10,大於等於10代表要進位,所以給進位的變量賦值爲1,並且使用StringBuffer對象調用追加方法累計結果,如果小於10就直接進行累計。

最後判斷是否最後面還需要進位,有的話就加1,再將StringBuffer對象倒序一下,因爲棧的特性是後進的先出。然後把計算完的值打印出來。

158bb6336b4c037e7c98a9bd32949b6b.png



代碼示例:

3d02ef5cdc8d7b3c47fbdfe0077427e6.png


運行結果:

5db2b33c2764357feb3f0a8c11754faf.png





枚舉:

枚舉就是一個選擇器,在調用某個需要傳遞參數的方法的時候能夠明確的知道需要傳遞什麼參數類型。

在以前老的JDK版本時候,在遇到一個方法不知道傳遞什麼類型的參數的時候,一般都是以傳遞這個類的常量來解決問題。

現在在JDK1.5之後就出現了一個枚舉器,所以就有了一種類型叫枚舉類型:Enum類型。

有了枚舉器就知道需要傳遞什麼參數類型的值了,枚舉器最大的作用就是能夠提醒用戶需要傳遞的是什麼類型的值。

枚舉類型的構造器不能是public修飾的,只能是其他的權限修飾符修飾。枚舉類型裏可以寫方法,但是相對於這種類型來說寫方法並沒有什麼意義。

在枚舉類裏直接寫的屬性值就是常量,values();方法能拿到這個枚舉器裏的所有常量。

 

代碼示例:

c712cd7c3d871e381875d920c802708f.png

194c0fa16b48be4a7f9cb0bc9d6400d4.png




泛型:

泛型是在JDK1.5之後纔有的,泛型要特定的類纔可以做泛型,沒有聲明泛型的類是不能夠使用泛型來操作的。泛型其實就是用來規定集合裏面能夠存儲什麼類型的,泛型也就只有集合裏才用得到。

在泛型還沒出現之前:

e6bcaa439dcc2b931834c34515adf9d8.png

5e18feea42e95b4a4586cae3b3908b88.png



泛型出現後:

50f02708b4f8698c496ab975232be80c.png

4da4da38912652cb1e93af851e25244f.png


泛型的一些使用方式:

ac9262794b73f06168803e807c0ef584.png



<? extends 類型>的使用:

08ae7118e30c753cd9310e5dfbcd9a0d.png

28c0eba1b897d742bc8f5dc8c6257e7d.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章