前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Stack集合与枚举、泛型

Stack集合与枚举、泛型

作者头像
端碗吹水
发布2020-09-23 10:30:10
4860
发布2020-09-23 10:30:10
举报
文章被收录于专栏:程序猿的大杂烩

Stack集合:

Stack是堆栈结构的集合,Stack集合是继承于Vector集合的子类,这个集合的特点是后进先出的堆栈结构。Stack提供5个额外的方法使得Vector得以被当做堆栈使用。基本的方法有push和pop方法,还有peek得到栈顶的元素,empty方法是测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚刚创建的时候是空栈。

push方法:

push是进栈方法,就像add方法一样,把元素添加进去,不同的是push更像是压×××一般,先压进去的最后面才打出,后压进去的最先打出。也就是先进的后出,后进的先出的特点。

栈示意图:

a0f87c65463e646734e82ab448e2849a.png
a0f87c65463e646734e82ab448e2849a.png

代码示例:

31470ff5583c1fb5e36cca5baa7d5370.png
31470ff5583c1fb5e36cca5baa7d5370.png

peek方法:

peek方法可以得到栈顶的元素,也就是最后进栈的那个元素,在出栈时可以利用这个方法得知下一个要出栈的对象,因为每出栈一个元素,下一个元素就是栈顶。

代码示例:

ebfa818c6f862ab58ee40dc4e091e0cd.png
ebfa818c6f862ab58ee40dc4e091e0cd.png

运行结果:

8cc395ff9931efe52d6adde19e9c29c5.png
8cc395ff9931efe52d6adde19e9c29c5.png

pop方法:

pop是出栈方法,元素出栈后直接就没了,等于从栈里移出去了,使用size可以得到这个集合的大小,所以可以做个试验,将所有的元素出栈后再打印集合的大小。

代码示例:

2a6a3f621397740ebb1a393ddcfdd25f.png
2a6a3f621397740ebb1a393ddcfdd25f.png

运行结果:

d11859ed8c0e8b8585d4aff68b0a34ef.png
d11859ed8c0e8b8585d4aff68b0a34ef.png

利用peek方法获知每一次将要出栈的元素:

代码示例:

be7cf37b332bb61404914f0cc176de06.png
be7cf37b332bb61404914f0cc176de06.png

运行结果:

758cec82df755c3900854e2f92a48107.png
758cec82df755c3900854e2f92a48107.png

从运行的结果也看得出来堆栈:先进的后出,后进的先出的特点

使用Stack集合写一个加法运算:

e554d6da8ccf8e6d6e9433920184f053.png
e554d6da8ccf8e6d6e9433920184f053.png

  这是在平时最经常用到也是最简单的一种计算加法的方式,使用Stack集合就可以实现这样的一种算法。

代码逻辑:

先以字符串的形式申请两个需要计算的数字,然后分别转换成char数组。接着分别构建两个Stack集合对象,再使用两个循环将两组char数组里的元素分别压进两个栈中。声明一个int变量来储存两个栈中大小最大的那个栈的size,构建一个StringBuffer对象来作为累计结果使用。

再声明一个int变量来记录进位,使用一个循环遍历栈中的元素,在循环里申请两个变量来记录每次出栈的数字,还需要将每次出栈的数字分别转换成整数类型,然后再存放到事先申请的两个变量中。

接着将两个数字和进位相加,再判断相加后的值是否大于等于10,大于等于10代表要进位,所以给进位的变量赋值为1,并且使用StringBuffer对象调用追加方法累计结果,如果小于10就直接进行累计。

最后判断是否最后面还需要进位,有的话就加1,再将StringBuffer对象倒序一下,因为栈的特性是后进的先出。然后把计算完的值打印出来。

158bb6336b4c037e7c98a9bd32949b6b.png
158bb6336b4c037e7c98a9bd32949b6b.png

代码示例:

3d02ef5cdc8d7b3c47fbdfe0077427e6.png
3d02ef5cdc8d7b3c47fbdfe0077427e6.png

运行结果:

5db2b33c2764357feb3f0a8c11754faf.png
5db2b33c2764357feb3f0a8c11754faf.png

枚举:

枚举就是一个选择器,在调用某个需要传递参数的方法的时候能够明确的知道需要传递什么参数类型。

在以前老的JDK版本时候,在遇到一个方法不知道传递什么类型的参数的时候,一般都是以传递这个类的常量来解决问题。

现在在JDK1.5之后就出现了一个枚举器,所以就有了一种类型叫枚举类型:Enum类型。

有了枚举器就知道需要传递什么参数类型的值了,枚举器最大的作用就是能够提醒用户需要传递的是什么类型的值。

枚举类型的构造器不能是public修饰的,只能是其他的权限修饰符修饰。枚举类型里可以写方法,但是相对于这种类型来说写方法并没有什么意义。

在枚举类里直接写的属性值就是常量,values();方法能拿到这个枚举器里的所有常量。

代码示例:

c712cd7c3d871e381875d920c802708f.png
c712cd7c3d871e381875d920c802708f.png
194c0fa16b48be4a7f9cb0bc9d6400d4.png
194c0fa16b48be4a7f9cb0bc9d6400d4.png

泛型:

泛型是在JDK1.5之后才有的,泛型要特定的类才可以做泛型,没有声明泛型的类是不能够使用泛型来操作的。泛型其实就是用来规定集合里面能够存储什么类型的,泛型也就只有集合里才用得到。

在泛型还没出现之前:

e6bcaa439dcc2b931834c34515adf9d8.png
e6bcaa439dcc2b931834c34515adf9d8.png
5e18feea42e95b4a4586cae3b3908b88.png
5e18feea42e95b4a4586cae3b3908b88.png

泛型出现后:

50f02708b4f8698c496ab975232be80c.png
50f02708b4f8698c496ab975232be80c.png
4da4da38912652cb1e93af851e25244f.png
4da4da38912652cb1e93af851e25244f.png

泛型的一些使用方式:

ac9262794b73f06168803e807c0ef584.png
ac9262794b73f06168803e807c0ef584.png

<? extends 类型>的使用:

08ae7118e30c753cd9310e5dfbcd9a0d.png
08ae7118e30c753cd9310e5dfbcd9a0d.png
28c0eba1b897d742bc8f5dc8c6257e7d.png
28c0eba1b897d742bc8f5dc8c6257e7d.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/10/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档