黑马程序员技术交流社区

标题: 说一说Stack的那些事儿 [打印本页]

作者: Act    时间: 2015-4-2 20:10
标题: 说一说Stack的那些事儿
刚学到集合这一块儿,作业中让自学Stack类,并且自己建立集合并遍历。真是遇到老多问题。
首先,Stack 类表示先进后出(LIFO)的对象堆栈。有自己的方法。
  1. import java.util.Stack;

  2. public class QuestionSixDemo {
  3.         public static void main(String[] args) {
  4.                 stack();
  5.         }

  6.         public static void stack() {
  7.                 Stack<String> sta = new Stack<String>();
  8.                 sta.push("java");
  9.                 sta.push("World");
  10.                 sta.push("Hello");
  11.                
  12.                
  13.                 while(!sta.empty()){
  14.                         System.out.println(sta.pop());
  15.                 }
  16. //                System.out.println(sta.pop());
  17. //                System.out.println(sta.pop());
  18. //                System.out.println(sta.pop());
  19.                
  20.                 /*Enumeration<String> e=sta.elements();
  21.                 while(e.hasMoreElements()){
  22.                 String s = e.nextElement();
  23.                 System.out.println(s);
  24.                 }*/
  25.                
  26.                 /*for (int i = 0; i < sta.size(); i++) {
  27.                         System.out.println(sta.pop());
  28.                 }
  29. */
  30.         }
  31. }
复制代码

看代码,可以成功显示出先进后出的就只有while 循环以及那三个pop输出语句。注释掉Enumeration<String> e=sta.elements();没有按照先进后出的方式显示;最后的for循环可以先进后出显示,但只显示两个,只有hello,world,没有Java,将System.out.println(sta.pop());换成System.out.println(sta.get());,三个元素全部显示,但不是先进后出。用增强for循环,
  1. for(String s : sta){
  2.                         System.out.println(s);
  3.                 }
复制代码

还是没有先进后出。最后发现只要用pop()方法,只显示两个元素,咋回事??????????
最后,跟同桌讨论用while,
  1. while(!sta.empty()){
  2.                         System.out.println(sta.pop());
  3.                 }
复制代码

如果集合不空,就循环。最终成功显示先进后出的顺序并且一个不少。
不知有没有啥错误跟不好的地方,欢迎拍砖与改进。

作者: lingrixin    时间: 2015-4-4 21:00
干得漂亮。

要是能给出思路就好了。
作者: 俊勇    时间: 2015-4-4 22:07
慢慢来,多学习,多交流~~~
作者: fantacyleo    时间: 2015-4-4 22:15
这个看你的需求。Stack也可以用迭代器遍历。由于Stack继承了Vector,也可以用get遍历。如果你不需要保留Stack中的数据,那么pop是ok的。如果你想遍历的同时不删除Stack中的数据,那么就要用迭代器或get遍历了
作者: 怀念子龙    时间: 2015-4-4 22:24
多看文档啊。对于你的第一个问题,for循环只有两个,是因为pop()方法弹出栈顶元素的同时会删除栈顶元素。所以size会变化,当然只能弹出两个了。

第二个问题,索引的方式不清楚,试了一下,应该是栈底元素的索引为0。for循环改成for(int i=sta.size()-1;i>=0;i--)就OK了。

第三个问题还是索引的问题。  栈底元素的索引为0 的原因造成没有打印出先进后出的现象。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2