Deque实现Stack

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()方法,这样代码更加清晰。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
的区别是什么?为什么在Java Doc中建议使用Deque接口替代Stack类完成的功能? 回答: Stack类和Deque类都可以用来实现的功能,但它们有一些区别。首先,在Java Doc中建议使用Deque接口替代Stack类完成的功能,是因为Stack类是继承自Vector类的,而Vector类是由数组实现的线程安全集合类,它包含了大量集合处理的方法。由于Stack类复用了Vector类的方法实现和出的操作,这导致了Stack类的效率相对较低。相比之下,Deque接口提供了更完整和一致的LIFO(后进先出)操作,并且可以有多种实现方式。在Java Doc中明确建议使用Deque接口及其实现类来替代Stack类。 另外,Deque接口还可以用作LIFO,当将Deque用作时,元素从Deque的开头进行推入和弹出操作。相比之下,Stack类的进和出操作是从Vector的末尾进行的。 综上所述,Java Doc中建议使用Deque接口替代Stack类完成的功能,是因为Deque接口提供了更完整、一致且效率更高的LIFO操作,并且可以有多种实现方式。 #### 引用[.reference_title] - *1* *3* [JavaStackDeque的比较](https://blog.csdn.net/wdy00000/article/details/123917628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java容器之StackDeque](https://blog.csdn.net/weixin_40096160/article/details/120772876)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值