一、概述

  1. 先进后出。
  2. 将元素放入栈中---入栈、压栈 ;将元素从栈中取出 --- 出栈、弹栈。
  3. 最先放入 栈中的元素--- 栈底元素;最后放入栈中的元素 --- 栈定元素。
  4. 基于Vactor。(参考:http://blog.csdn.net/chou_out_man/article/details/78053955)。
  5. 底层是数组。内存空间连续,查询较快,增删较慢。

二、方法摘要

  1. push() : 向栈中添加一个元素 --- 入栈
  2. pop() ; 移除栈顶元素 --- 出栈
  3. peek() : 获取栈顶元素但不移除
  4. 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

2.   用数组实现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相关推荐

  1. java中集合的排序

    java中集合的排序 import java.util.Set; import java.util.HashSet; import java.util.List; import java.util.A ...

  2. java中集合判空_Java中的类型安全的空集合

    java中集合判空 我以前曾在Java Collections类的实用程序上进行过博客撰写,并且特别地在使用Usings Collections Methods上的博客emptyList(),empt ...

  3. 分析Java中的三种不同变量的区别

    1.首先分析Java中的三种不同变量的区别,如下表所示   概念 默认值 其他 类变量 也叫静态变量,是类中独立于方法之外的变量 用static 修饰 有默认初始值,系统自动初始化. 如boolean ...

  4. java中集合选取怎么选_集合中的可选

    java中集合选取怎么选 有时有人认为Optional类型值得在集合中使用. 据称,它解决了以下问题: HashMap在没有键映射以及值null映射到键的情况下返回null . 如果使用Map< ...

  5. Java中集合拥有的共性方法

    在Java中集合的共性方法 1.在Java中集合作为最顶层的集合,他拥有所有集合有的共性方法.所以在定义实现类的时候可以使用多态. 集合拥有的共性方法: public boolean add(E e) ...

  6. java中集合的分类以及集合的选择

    一.java中的集合 一般同学都是从c语言起步的,刚开始使用java时,会对集合这个概念比较陌生,在c语言中我们表示数据的集合往往使用数组,在编写c程序时觉得数组完全可以满足我们的基本需要.而到了ja ...

  7. java中集合转数组中_JAVA中集合转数组遍历

    JAVA中集合的遍历的一种方法时集合转数组遍历,也是就调用Collection中的toArray(). 代码: public static void main(String[] args) { // ...

  8. 【转帖】map,set,list,等JAVA中集合解析 - Java - cjw的资料

    导读: JavaTM 2 Platform Standard Ed. 5.0 在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父子关系: java.util      ...

  9. Java中集合的自定义运算符

    总览 操作员重载有多种语言可用. Java对String类型的+运算符的支持对运算符的重载非常有限. 我们可以利用其他语言支持运算符的不同方式,但是可以在Java中实现一个使用Java已经使用的约定的 ...

  10. 【小家java】Java中集合List、Set、Map删除元素的方法大总结(避免ConcurrentModificationException异常)

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

最新文章

  1. 【PyTorch学习笔记】4:在Tensor上的索引和切片
  2. javascript es6 module 模块 的使用
  3. 如何查看windows版本号?
  4. java代码调用python_Java调用Python
  5. python项目构建工具zc.buildout
  6. java-第五章-while=计算1~50中是7的被耍的数值之和
  7. 这个图像工具箱,让我找得好苦
  8. vscode鼠标滚轮调整字体大小
  9. 关于CREO图纸导出到CAD后尺寸不对的问题
  10. Freebase上的SPARQL查询
  11. 国内最著名的公用CDN BootCDN停止服务
  12. IE8上面的旋转和透明度,利用滤镜属性去处理(兼容css3的transform和rgba())
  13. 不用深度学习网络,只需预先设置NAS算法,就能实现AutoML自动机器学习的革命吗?
  14. Git从库中移除已删除大文件
  15. html img设置形状,图片img直接设置样式
  16. Java 操作excel 插入删除列,插入删除图片
  17. 数学大世界杂志数学大世界杂志社数学大世界编辑部2022年第7期目录
  18. nginx配置web项目外网访问
  19. 分享到qq空间android,android 分享到QQ空间的全部操作
  20. 计算机专业课程体系介绍(含学习顺序)

热门文章

  1. Atitit.rust语言特性 attilax 总结
  2. SQL优化的若干原则
  3. Gmail POP3设置
  4. 淘宝支付页面代码php,支付页面html模板
  5. 怎么查看有关cas的报错_Linux LVM I/O报错,你也遇到这样的问题吗?
  6. 用vhdl实现4位加减法计数器_频率计数器的使用方法介绍
  7. android 判断http编码格式,安卓入门笔记之HttpURLConnection的使用
  8. java普通类获取session_springboot普通类中如何获取session?
  9. Html的一些小东西
  10. Longest Palindromic Substring