三个实现类的基本对比
Stack:java古老的集合类。性能较差。用于实现 “栈”。
ArrayDeque:双端队列Deque接口的实现类。用于实现 “双端队列” 和 “栈”。
LinkedList:List接口和Deque接口的实现类。用于实现List、 “双端队列”、 和 “栈”。
java中栈的实现,一般使用 ArrayDeque和LinkedList。
Stack 和 ArrayDeque 实现栈的方法对比
代码:
public class ArrayDequeStack {
public static void main(String[] args) {
System.out.println("ArrayDeque:");
ArrayDeque stack = new ArrayDeque();
stack.push("woshi1");
stack.push("woshi2");
stack.push("woshi3");
stack.push("woshi4");
System.out.println(stack);
System.out.println(stack.peek()); //woshi4
System.out.println(" ");
System.out.println("Stack:");
Stack stack1 = new Stack();
stack1.push(1);
stack1.push(2);
stack1.push(3);
stack1.push(4);
// stack1.pop();
System.out.println(stack1);
System.out.println(stack1.peek());
}
}
输出:
ArrayDeque:
[woshi4, woshi3, woshi2, woshi1]
woshi4
Stack:
[1, 2, 3, 4]
4
可以看到,ArrayDeque完全可以当作栈来使用(替代Stack类)。
也同样可以看到:ArrayDeque的push方法等同于addFirst方法(往队首添加元素),因此ArrayDeque逻辑上的 “栈顶” 的位置是处于空间上的 “队首” 的。
LinkedList 作为List、双端队列、栈
代码:
public class LinkedListTest {
public static void main(String[] args) {
LinkedList linkedList = new LinkedList();
linkedList.offer("我是1"); //队列
linkedList.push("我是2"); //栈
linkedList.offerFirst("我是3"); //双端队列
System.out.println(linkedList);
for (int i = 0; i < linkedList.size(); i++) { //list
System.out.println(linkedList.get(i));
}
System.out.println("peek:");
System.out.println(linkedList.peek());//队列 栈
System.out.println("peekFirst:");
System.out.println(linkedList.peekFirst());//双端队列
System.out.println("peekLast");
System.out.println(linkedList.peekLast());//双端队列
System.out.println("pop之后:");
linkedList.pop(); //栈
System.out.println(linkedList);
System.out.println("pollLast之后:");
linkedList.pollLast(); //双端队列
System.out.println(linkedList);
}
}
输出:
[我是3, 我是2, 我是1]
我是3
我是2
我是1
peek:
我是3
peekFirst:
我是3
peekLast
我是1
pop之后:
[我是2, 我是1]
pollLast之后:
[我是2]
LinkedList逻辑上的 “栈顶” 的位置也是处于空间上的 “队首” 的。