李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
持有对象--Stack
Leefs
2019-12-05 AM
1426℃
0条
# 持有对象--Stack ### 前言 本小节将简单介绍一下《Java编程思想》第11.8节,Stack. ### 概念引入 ”栈“通常是指“后进先出”(LIFO)的容器。有时栈也被称为**叠加栈**,因为最后压入的元素第一个弹出栈。 LinkedList具有能够直接实现栈的所有功能的方法,因此可以直接将LinkedList作为栈使用。不过,有时一个真正的“栈”更能把事情说清楚: ```java public class Stack
{ private LinkedList
storage = new LinkedList
(); public void push(T v){//添加元素至栈顶 storage.addFirst(v); } public T peek(){//获得栈顶元素 return storage.getFirst(); } public T pop(){//移除栈顶元素 return storage.removeFirst(); } public boolean empty(){//判断是否为空 return storage.isEmpty(); } public String toString(){//打印toString方法 return storage.toString(); } } ``` 这里通过使用范型,引入了在栈的类定义中最简单的可行示例。类名之后的
告诉编译器这将是一个参数化类型,而其中的类型参数,即在类被使用时将会被实际类型替换的参数,就是T。 大体上,这个类是在声明 我们在定义一个可以持有T类型对象的Stack。 Stack是 用LinkedList实现的,而LinkedList也被 告知它将持有T类型对象。 注意,push接受的是T类型的对象,而peek0和pop0将返回T类型的对象。peek方法将提供栈顶元素,但是并不将其从栈顶移除,而pop将移除并返回栈顶元素。 ### Stack介绍 Stack是栈。它的特性是:**先进后出**(FILO, First In Last Out)。 ava工具包中的Stack是继承于Vector的,由于Vector是通过数组实现的,这就意味着,**Stack也是通过数组实现的**,**而非链表** #### 1. Stack的继承关系 ```java java.lang.Object ↳ java.util.AbstractCollection
↳ java.util.AbstractList
↳ java.util.Vector
↳ java.util.Stack
public class Stack
extends Vector
{} ``` #### 2.**Stack和Collection的关系如下图**: ![Stack和Collection的关系图01.jpg][1] #### 3.Stack的构造函数 Stack只有一个默认构造函数: ``` Stack() ``` #### 4.Stack中的方法 > 1. 1.boolean empty() :测试堆栈是否为空。 > 2. 2.Object peek( ):查看堆栈顶部的对象,但不从堆栈中移除它。 > 3. 3.Object pop( ):移除堆栈顶部的对象,并作为此函数的值返回该对象。 > 4. 4.Object push(Object element):把对象压入堆栈顶部。 > 5. 5.int search(Object element):返回对象在堆栈中的位置,以 1 为基数。 #### 5.代码示例 **Stack基本使用** ```java public class StackTest { public static void main(String[] args) { Stack
stack = new Stack
(); for(String s : "My dog has fleas".split(" ")){ stack.push(s); } while(!stack.empty()){ System.out.print(stack.pop()+" "); } } } ``` > 运行结果 ```java fleas has dog My ``` 如果你想在自己的代码中使用这个Stack类,当你在创建其实例时,就需要完整指定包名,或者更改这个类的名称;否则,就有可能与java.util包中的Stack发生冲突。 例如,如果我们在上面的例子中导人java.util.*,那么就必须使用包名以防止冲突: ```java public class StackCollision { public static void main(String[] args) { com.java.util.Stack
stack = new com.java.util.Stack
(); for(String s : "My dog has fleas".split(" ")) stack.push(s); while(!stack.empty()) System.out.print(stack.pop() + " "); System.out.println(); java.util.Stack
stack2 = new java.util.Stack
(); for(String s : "My dog has fleas".split(" ")) stack2.push(s); while(!stack2.empty()) System.out.print(stack2.pop() + " "); } } ``` > 运行结果 ```java fleas has dog My fleas has dog My ``` 这两个Stack具有相同的接口,但是在java.util中没有任何公共的Stack接口,这可能是因为 在Javal.0中的设计欠佳的最初的java.util.Stack类占用了这个名字。尽管已经有了java.util.Stack, 但是LinkedList可以产生更好的Stack ,因此com.java.util.Stack所采用的方式更是可取的。 ### 6.练习题 ``` 栈在编程语言中经常用来对表达式求值。请使用net.mindview.util.Stack对下面的表达式求值,其中“+”表示“将后面的字母压进栈”,而“-”表示“弹出栈顶字母并打印它”: “+U+n+c—+e+r+t—+a-+i-+n+t+y—+ -+r+u–+l+e+s—” ``` #### 代码 ```java public class StackTest15 { public static void main(String[] args) { Stack
stack = new Stack
(); String s = "+U+n+c---+e+r+t---+a-+i-+n+t+y---+ -+r+u--+l+e+s---"; char data[] = s.toCharArray();//将字符串转换为字符数组 for(int i=0;i
运行结果 ```java cnUtreaiytn ursel ``` *附:[参考文章链接](https://www.cnblogs.com/msymm/p/9873863.html)* [1]: https://lilinchao.com/usr/uploads/2019/12/2036946267.jpg
标签:
Java
,
Java编程思想
,
JavaSE
,
持有对象
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/256.html
上一篇
持有对象--LinkedList
下一篇
【转载】Java集合Set基础总结
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
43
标签云
哈希表
Flink
散列
Jquery
DataX
NIO
Thymeleaf
Stream流
Livy
Beego
链表
SQL练习题
Nacos
人工智能
Hive
Spark Core
Tomcat
Http
Kibana
字符串
ClickHouse
前端
数据结构和算法
高并发
Golang基础
Spark
排序
Java工具类
BurpSuite
SpringCloudAlibaba
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞