Deque与Stack实现栈的区别

使用Deque
允许两头都进,两头都出,这种队列叫双端队列(Double Ended Queue),简称Deque。
Java集合提供了接口Deque来实现一个双端队列,它的功能:
①既可以添加到队尾,也可以添加到队首;
②既可以从队首获取,又可以从队尾获取。

在原来的queue的方法名上加了表示在队首还是队尾操作的表示(Last或First)。
Deque接口实际上扩展自Queue:

public interface Deque<E> extends Queue<E> {
    ...
}
1
2
所以说你是可以继续用add()/offer()的,但是为了能够看出操作 的位置还是写上比较好。
Deque是一个接口,它的实现类有ArrayDeque和LinkedList。
LinkedList即是List,又是Queue,还是Deque。但是我们在使用的时候,总是用特定的接口来引用它,这是因为持有接口说明代码的抽象层次更高,而且接口本身定义的方法代表了特定的用途。

Deque<String> d2 = new LinkedList<>();
d2.offerLast("z");
1
可见面向抽象编程的一个原则就是:尽量持有接口,而不是具体的实现类。

Stack
栈的性质C的时候就学过了,先进后出,只需看下Java里对于他的方法有哪些
Stack的入栈和出栈的操作:
①把元素压栈:push(E);
②把栈顶的元素“弹出”:pop(E);
③取栈顶元素但不弹出:peek(E)。
在Java中,我们用Deque可以实现Stack的功能:
①把元素压栈:push(E)/addFirst(E);
②把栈顶的元素“弹出”:pop(E)/removeFirst();
③取栈顶元素但不弹出:peek(E)/peekFirst()。
Java的集合类并没有单独的Stack接口,因为有个遗留类名字就叫Stack,出于兼容性考虑,所以没办法创建Stack接口,只能用Deque接口来“模拟”一个Stack了。
当我们把Deque作为Stack使用时,注意只调用push()/pop()/peek()方法,不要调用addFirst()/removeFirst()/peekFirst()方法,那样会破坏栈的本质。
———————————————

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值