我需要使用堆栈来创建存储对象的列表,我尝试查找API,但是,我不知道我应该参考哪种语法。
这是我的代码:
public class Rock {
public String name;
public Rock(String name){
this.name=name;
}
}
public class RockTest{
public static void main(String[] args){
Rock r1 = new Rock("eluanshi");
Rock r2 = new Rock("jingangshi");
Rock r3 = new Rock("dalishi");
Stack(r1,r2,r3); // this is obviously wrong but how can i deal with it
}
}
答案 0 :(得分:9)
Stack是泛型类型,它只有一个没有参数的构造函数。您需要在堆栈中push
数据:
Stack<Rock> stack = new Stack<Rock>();//use new Stack<>() in Java 7 (diamond inference)
stack.push(r1);
stack.push(r2);
stack.push(r3);
这将导致顶部有r3
的堆栈。如果您希望push
位于最前,则可以撤销r1
说明。
泛型(<>
部分)指定堆栈将包含的元素类型。如果你使用Rock
(如上例所示),你只能在堆栈上推动岩石。然而,优势在于,当您pop
元素时,您确信它是一块石头。例如,如果你想创建一个包含多个元素(String
,...)的堆栈,你可以使用object:
Stack<Object> stack = new Stack<>();
stack.push(r1);//rock at the bottom
stack.push("Second item");
stack.push(r2);
stack.push((Integer) 2);
stack.push("Four elements already");
stack.push(r3);
这样做的缺点当然是你无法在编译时确定你将从堆栈中弹出的元素类型。
您可以使用Stack
方法迭代Stack<T>.iterator
:
Stack<Rock> stack = new Stack<Rock>();
stack.push(r1);
stack.push(r2);
stack.push(r3);
Iterator<Rock> iter = stack.iterator();
while(iter.hasNext()) {
Rock r = iter.next();
//do something with the current rock
}
在Java的现代版本中(可能从Java 7开始),您可以使用foreach-construct:
Stack<Rock> stack = new Stack<Rock>();
stack.push(r1);
stack.push(r2);
stack.push(r3);
for(Rock r : stack) {
//do something with the current rock
}
请注意,堆栈的迭代器从上到下工作。因此,r3
将首先进行迭代。