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





本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/1976555,如需转载请自行联系原作者

相关文章
|
监控 测试技术 持续交付
探索自动化测试在软件开发中的最佳实践
本文旨在深入探讨自动化测试在软件开发过程中的应用,以及如何有效地实施自动化测试以提高软件质量和开发效率。通过分析自动化测试的优势、挑战和最佳实践,本文为软件开发团队提供了一套实用的指导方案。
|
监控 关系型数据库 MySQL
|
3天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
269 116
|
18天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
12天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
661 220
|
5天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
334 34
Meta SAM3开源:让图像分割,听懂你的话
|
10天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1532 157