李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
持有对象--Stack
Leefs
2019-12-05 AM
2126℃
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://lilinchao.com/archives/256.html
上一篇
持有对象--LinkedList
下一篇
【转载】Java集合Set基础总结
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Spark RDD
Redis
ajax
数学
LeetCode刷题
Spring
MyBatisX
Elastisearch
Docker
Quartz
并发编程
Spark SQL
DataWarehouse
Elasticsearch
MyBatis-Plus
序列化和反序列化
VUE
DataX
字符串
国产数据库改造
Thymeleaf
Hbase
Flume
Netty
Linux
NIO
gorm
Hive
数据结构和算法
Hadoop
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭