java中的Stack 、ArrayDeque 、 LinkedList

三个实现类的基本对比

Stack:java古老的集合类。性能较差。用于实现 “栈”

ArrayDeque:双端队列Deque接口的实现类。用于实现 “双端队列”“栈”

LinkedList:List接口和Deque接口的实现类。用于实现List“双端队列”、 和 “栈”

java中栈的实现,一般使用 ArrayDequeLinkedList

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逻辑上的 “栈顶” 的位置也是处于空间上的 “队首” 的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值