import java.util.Iterator;
import java.util.Stack;
public class StackExample {
public static void main(String args[]){
Stack<String> sk = new Stack<String>();
sk.push("Hello");
sk.push("Hello1");
sk.push("Hello2");
sk.push("Hello3");
System.out.println("The Values of Stack" +sk);
Iterator it=sk.iterator();
System.out.println("Size before pop() :"+sk.size());
while(it.hasNext())
{
String iValue=(String)it.next();
System.out.println("Iterator value :"+iValue);
}
String value =(String)sk.pop();
System.out.println("value :"+value);
System.out.println("Size After pop() :"+sk.size());
}
}
任何人都可以向我解释以下问题。
while(it.hasNext()){
String iValue=(String)it.next();
System.out.println("Iterator value :"+iValue);
}
为什么我们以这种方式迭代以及hasNext和next接下来是什么 做?我可以不用for循环做同样的事。
String value =(String)sk.pop();
(String)sk.pop是什么意思...为什么我不编译 删除(String)
任何人都可以引导我使用Java中的一些优秀而复杂的Stack示例
答案 0 :(得分:3)
广告1:这是标准的Java Iterator
。由于Stack
实现了Iterable
,您可以简单地写一下:
for (String item : sk)
{
System.out.println(item);
}
广告2:需要转换为String
,因为声明Iterator
没有泛型类型(这是一种不好的做法)。试试:
Iterator<String> it=sk.iterator();
不再需要施法。
广告3:这是一个用10分钟写的简单示例:
public static void validateXml(String xml) {
Stack<String> tags = new Stack<String>();
for (String tag : xml.split("\\s"))
if(tag.startsWith("</")) {
if (tags.isEmpty())
throw new IllegalArgumentException("No start tag matching: " + tag);
final String startTag = tags.pop();
if (!startTag.substring(1).equals(tag.substring(2)))
throw new IllegalArgumentException("Start tag: " + startTag + " does not match end tag: " + tag);
} else
tags.push(tag);
if (!tags.isEmpty())
throw new IllegalArgumentException("No end tag matching: " + tags);
}
用法:
validateXml("<a> <b> </b> <c> <d> </d> <e> </e> </c> </a>");
validateXml("<a> <b> </b> <c> <d> <e> </d> </e> </c> </a>"); //fails to validate
答案 1 :(得分:2)
的 1。为什么我们以这种方式迭代以及
hasNext
和next
做了什么?我不能用for循环做同样的事。
next
从迭代器中提取下一个值,hasNext
告诉您是否是否有下一个值。< / p>
是的,您可以使用for循环执行相同的操作:
for (String str: sk)
System.out.println(str);
例如,应该做得很好。
的 2。
时,为什么它不能编译(String)sk.pop
意味着什么......当我删除(字符串)
弹出堆栈元素时,删除“top”(最后插入)元素。 (String)
部分是演员。如果pop
返回Object
并且(您知道它实际上是String
)并且您希望将其存储在String
引用中,则必须这样做。
第3。任何人都可以引导我使用Java中的一些优秀而复杂的Stack示例
复杂的堆栈示例?嗯,不,我不能。堆栈基本上提供推送和弹出,这非常简单。无论示例是什么,由于除了使用堆栈之外的其他东西,它将是复杂的,这将无助于您更好地理解堆栈: - )
答案 2 :(得分:2)
Stack是一个“遗留”集合,它从Vector扩展而来。两者都来自Java 1.0的旧时代。 使用它不是一个好主意,因为Vector方法是同步的。 相反,您可以使用最新的Deque接口,例如,ArrayDeque或LinkedList。