黑马程序员技术交流社区
标题:
说一说Stack的那些事儿
[打印本页]
作者:
Act
时间:
2015-4-2 20:10
标题:
说一说Stack的那些事儿
刚学到集合这一块儿,作业中让自学Stack类,并且自己建立集合并遍历。真是遇到老多问题。
首先,Stack 类表示先进后出(LIFO)的对象堆栈。有自己的方法。
import java.util.Stack;
public class QuestionSixDemo {
public static void main(String[] args) {
stack();
}
public static void stack() {
Stack<String> sta = new Stack<String>();
sta.push("java");
sta.push("World");
sta.push("Hello");
while(!sta.empty()){
System.out.println(sta.pop());
}
// System.out.println(sta.pop());
// System.out.println(sta.pop());
// System.out.println(sta.pop());
/*Enumeration<String> e=sta.elements();
while(e.hasMoreElements()){
String s = e.nextElement();
System.out.println(s);
}*/
/*for (int i = 0; i < sta.size(); i++) {
System.out.println(sta.pop());
}
*/
}
}
复制代码
看代码,可以成功显示出先进后出的就只有while 循环以及那三个pop输出语句。注释掉
Enumeration<String> e=sta.elements();没有按照先进后出的方式显示;最后的for循环可以先进后出显示,但只显示两个,只有hello,world,没有Java,将System.out.println(sta.pop());换成System.out.println(sta.get());,三个元素全部显示,但不是先进后出。用增强for循环,
for(String s : sta){
System.out.println(s);
}
复制代码
还是没有先进后出。最后发现只要用pop()方法,只显示两个元素,咋回事??????????
最后,跟同桌讨论用while,
while(!sta.empty()){
System.out.println(sta.pop());
}
复制代码
如果集合不空,就循环。最终成功显示先进后出的顺序并且一个不少。
不知有没有啥错误跟不好的地方,欢迎拍砖与改进。
作者:
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