Stack集合与枚举、泛型

Stack集合:

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

 

push方法:

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

 

栈示意图:


Stack集合与枚举、泛型


代码示例:

Stack集合与枚举、泛型



peek方法:

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

代码示例:

Stack集合与枚举、泛型


运行结果:

Stack集合与枚举、泛型


pop方法:

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

代码示例:

Stack集合与枚举、泛型



运行结果:

Stack集合与枚举、泛型



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

代码示例:

Stack集合与枚举、泛型


运行结果:

Stack集合与枚举、泛型

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



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

Stack集合与枚举、泛型

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



代码逻辑:

 

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

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

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

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

Stack集合与枚举、泛型



代码示例:

Stack集合与枚举、泛型


运行结果:

Stack集合与枚举、泛型





枚举:

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

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

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

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

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

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

 

代码示例:

Stack集合与枚举、泛型

Stack集合与枚举、泛型




泛型:

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

在泛型还没出现之前:

Stack集合与枚举、泛型

Stack集合与枚举、泛型



泛型出现后:

Stack集合与枚举、泛型

Stack集合与枚举、泛型


泛型的一些使用方式:

Stack集合与枚举、泛型



<? extends 类型>的使用:

Stack集合与枚举、泛型

Stack集合与枚举、泛型





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