Java中集合(三)Stack
一、概述
- 栈
- 先进后出。
- 将元素放入栈中---入栈、压栈 ;将元素从栈中取出 --- 出栈、弹栈。
- 最先放入 栈中的元素--- 栈底元素;最后放入栈中的元素 --- 栈定元素。
- 基于Vactor。(参考:http://blog.csdn.net/chou_out_man/article/details/78053955)。
- 底层是数组。内存空间连续,查询较快,增删较慢。
二、方法摘要
- push() : 向栈中添加一个元素 --- 入栈
- pop() ; 移除栈顶元素 --- 出栈
- peek() : 获取栈顶元素但不移除
- search() ; 获取指定元素在栈中的位置 ,从栈顶开始找,基数为1。
public static void main(String[] args) {Stack<String> s = new Stack<String>();//入栈 ,左边为栈底,右边为栈顶s.push("a");s.push("b");s.push("c");s.push("d");System.out.println(s);//出栈String str = s.pop();System.out.println(str);//获取而不移除栈顶元素String str1 = s.peek();System.out.println(str1);System.out.println(s);//判断是否是一个空栈System.out.println(s.isEmpty());//获取元素在栈中出现的位置,查找元素时是从栈顶到栈底查找,以1为基数、System.out.println(s.search("a"));}
练习: 1. 用Vactor实现Stack
1. /*** 用Vector实现Stack* */
public class Demo_01 {public static void main(String[] args) {jiazhuanStack1 j = new jiazhuanStack1();//添加元素j.push("a");j.push("b");j.push("c");j.push("d");System.out.println(j);//弹出栈顶元素j.pop();System.out.println(j);//读取栈顶元素但不弹出String str = j.peek();System.out.println(str);System.out.println(j);//判断是否时空栈System.out.println(j.isEmpty());//获取指定位置的元素System.out.println(j.search("a"));}
}
class jiazhuanStack1{private Vector v;public jiazhuanStack1() {v= new Vector<String>();}//入栈public void push (String str){v.add(str);}//出栈public void pop(){v.remove(this.peek());}//获取栈顶元素而不移除public String peek(){if(v.isEmpty()){throw new EmptyStackException();}return (String) v.lastElement();//返回栈顶元素}//判断是不是空public boolean isEmpty(){return v.isEmpty();}//获取指定元素的位置public int search(String str ){int index = -1; int i = 0;if(str==null){return index;}Enumeration e = v.elements();String str1 = null;while(e.hasMoreElements()){str1 = (String) e.nextElement();if(str1.equals(str)){break;}i++;}return i>=0? v.size() -i:index;}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append("[");for(int i =0;i<v.size();i++){sb.append(v.get(i)+",");}String str = sb.toString();str = str.substring(0,str.length()-1);str+="]";return str;}
}
2.
/*** 用数组实现 Stack* */
public class Demo_02 {public static void main(String[] args) {jiazhuangStack2 j = new jiazhuangStack2();//添加元素j.push("a");j.push("b");j.push("c");j.push("d");System.out.println(j);//弹出栈顶元素j.pop();System.out.println(j);//读取栈顶元素但不弹出String str = j.peek();System.out.println(str);System.out.println(j);//判断是否时空栈System.out.println(j.isEmpty());//获取指定位置的元素System.out.println(j.search("a"));}}
class jiazhuangStack2{private String[] ss;private int size;public jiazhuangStack2() {ss = new String[10]; size = 0;}//入栈public void push(String str ){if(str == null){throw new NullPointerException();}else if(size>=ss.length){//数组扩容一倍Arrays.copyOf(ss, ss.length<< 2);}else{ss[size] = str;size++;}}//出栈public String pop(){String str = this.peek();size--;return str;}//获取栈顶元素并不移除public String peek(){String str = null;if(ss.length<0){throw new EmptyStackException();}else if(size<=0){//System.out.println("栈中没有元素");return str;}else{str = ss[size-1];return str;}}//判断是不是空栈public boolean isEmpty(){return size>0?false :true;}//获取指定元素的位置public int search(String str){for(int i = 0;i<size-1;i++){if(ss[i].equals(str)){return size - i;}}return -1;}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append("[");for(int i =0;i<size;i++){sb.append(ss[i]+",");}String str = sb.toString();str = str.substring(0,str.length()-1);str+="]";return str;}
}
Java中集合(三)Stack相关推荐
- java中集合的排序
java中集合的排序 import java.util.Set; import java.util.HashSet; import java.util.List; import java.util.A ...
- java中集合判空_Java中的类型安全的空集合
java中集合判空 我以前曾在Java Collections类的实用程序上进行过博客撰写,并且特别地在使用Usings Collections Methods上的博客emptyList(),empt ...
- 分析Java中的三种不同变量的区别
1.首先分析Java中的三种不同变量的区别,如下表所示 概念 默认值 其他 类变量 也叫静态变量,是类中独立于方法之外的变量 用static 修饰 有默认初始值,系统自动初始化. 如boolean ...
- java中集合选取怎么选_集合中的可选
java中集合选取怎么选 有时有人认为Optional类型值得在集合中使用. 据称,它解决了以下问题: HashMap在没有键映射以及值null映射到键的情况下返回null . 如果使用Map< ...
- Java中集合拥有的共性方法
在Java中集合的共性方法 1.在Java中集合作为最顶层的集合,他拥有所有集合有的共性方法.所以在定义实现类的时候可以使用多态. 集合拥有的共性方法: public boolean add(E e) ...
- java中集合的分类以及集合的选择
一.java中的集合 一般同学都是从c语言起步的,刚开始使用java时,会对集合这个概念比较陌生,在c语言中我们表示数据的集合往往使用数组,在编写c程序时觉得数组完全可以满足我们的基本需要.而到了ja ...
- java中集合转数组中_JAVA中集合转数组遍历
JAVA中集合的遍历的一种方法时集合转数组遍历,也是就调用Collection中的toArray(). 代码: public static void main(String[] args) { // ...
- 【转帖】map,set,list,等JAVA中集合解析 - Java - cjw的资料
导读: JavaTM 2 Platform Standard Ed. 5.0 在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父子关系: java.util ...
- Java中集合的自定义运算符
总览 操作员重载有多种语言可用. Java对String类型的+运算符的支持对运算符的重载非常有限. 我们可以利用其他语言支持运算符的不同方式,但是可以在Java中实现一个使用Java已经使用的约定的 ...
- 【小家java】Java中集合List、Set、Map删除元素的方法大总结(避免ConcurrentModificationException异常)
相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...
最新文章
- 【PyTorch学习笔记】4:在Tensor上的索引和切片
- javascript es6 module 模块 的使用
- 如何查看windows版本号?
- java代码调用python_Java调用Python
- python项目构建工具zc.buildout
- java-第五章-while=计算1~50中是7的被耍的数值之和
- 这个图像工具箱,让我找得好苦
- vscode鼠标滚轮调整字体大小
- 关于CREO图纸导出到CAD后尺寸不对的问题
- Freebase上的SPARQL查询
- 国内最著名的公用CDN BootCDN停止服务
- IE8上面的旋转和透明度,利用滤镜属性去处理(兼容css3的transform和rgba())
- 不用深度学习网络,只需预先设置NAS算法,就能实现AutoML自动机器学习的革命吗?
- Git从库中移除已删除大文件
- html img设置形状,图片img直接设置样式
- Java 操作excel 插入删除列,插入删除图片
- 数学大世界杂志数学大世界杂志社数学大世界编辑部2022年第7期目录
- nginx配置web项目外网访问
- 分享到qq空间android,android 分享到QQ空间的全部操作
- 计算机专业课程体系介绍(含学习顺序)
热门文章
- Atitit.rust语言特性 attilax 总结
- SQL优化的若干原则
- Gmail POP3设置
- 淘宝支付页面代码php,支付页面html模板
- 怎么查看有关cas的报错_Linux LVM I/O报错,你也遇到这样的问题吗?
- 用vhdl实现4位加减法计数器_频率计数器的使用方法介绍
- android 判断http编码格式,安卓入门笔记之HttpURLConnection的使用
- java普通类获取session_springboot普通类中如何获取session?
- Html的一些小东西
- Longest Palindromic Substring