在java中创建一个堆栈

Zoe*_*oeH 1 java stack vector

我需要使用堆栈来创建存储对象的列表,我尝试查找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
}



 }
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 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);
Run Code Online (Sandbox Code Playgroud)

这将导致堆叠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);
Run Code Online (Sandbox Code Playgroud)

这样做的缺点当然是你不能在编译时确定你将从堆栈中弹出的元素的类型.


您可以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
}
Run Code Online (Sandbox Code Playgroud)

在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
}
Run Code Online (Sandbox Code Playgroud)

请注意,堆栈的迭代器从上到下工作.所以r3将首先迭代.

  • 钻石操作符`<>`是在Java 7中引入的,而不是Java 5.但是否则很好的答案! (2认同)