📣 Back to School开学季 - VIP通行证5折优惠!蓝莓、Offer多多同步优惠
12
返回列表 发新帖
楼主: liuzz10
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 建stack时,用Stack<>和Linkedlist<>的区别?

全局:
我记得我看到过 *不好使指刷题不好使
Java里的Stack不好使,直接用ArrayDeque当Stack就可以。
就跟Python的Queue不好使,大家都用collections.deque()一样。
回复

使用道具 举报

全局:
推荐楼主一本书,看完之后应该基本上懂了
Java Generics and Collections
https://learning.oreilly.com/lib ... ics-and/0596527756/
回复

使用道具 举报

🔗
niuhj 2020-9-13 07:59:16 | 只看该作者
全局:
首先,Stack = new Stack,只是因为这个写法表达性最好,表达出了使用的是stack,但实际上Java Doc中说了,不要用Stack了,所以这个用法的好处只在于表示用了stack。
linkedlist既可以当做stack也可以当做queue,所以自然可以用linkedlist。但是为了表示你在使用特定的stack或者queue,那么就用Deque表示其类型,并且方法只使用push pop,大家就都知道这个定义的只是单纯的stack或者queue,而不是普遍的linkedlist,
回复

使用道具 举报

🔗
conghao2016 2020-9-13 08:16:26 | 只看该作者
全局:
。。。。醉了 Stack 这个类已经不推荐使用了,目前推荐使用的是Deque,至于怎么实现没差,毕竟你只是把它当做stack用,只关心先进后出而已,我一般用linkedlist
回复

使用道具 举报

🔗
 楼主| liuzz10 2020-9-13 08:19:47 | 只看该作者
全局:
不知道小帅 发表于 2020-9-12 14:56
嗯,interface的话只要一个class implement了这个interface就可以声明这个interface,然后instantiate这个 ...

原来如此!好的谢谢指出reference,我去看一下~
回复

使用道具 举报

🔗
肥颓 2020-9-13 08:49:00 | 只看该作者
全局:
本帖最后由 肥颓 于 2020-9-13 08:50 编辑
liuzz10 发表于 2020-9-13 05:33
谢谢大神!是说最好要选择更远离实现细节的吗?可以请你具体解释一下实现细节是什么意思吗?

不是大神
不是大神

细节就是,比方说stack 这个类最大的问题就是,stack 是继承自vector 的(stack is a subclass of vector);
当你在用stack 的时候,其实不需要vector 带来的那些“access by index" 的方法;
所以vector 就带了一些“不必要的细节”儿deque 作为一个interface 就没有这种问题。。。面向interface 总是好的

https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html
deque 就没有stack 的问题

LinkedList 里面那些toArray 之类的东西也不是你要的吧。。。
这些都是你不需要的细节

回复

使用道具 举报

🔗
ztztzt8888 2020-9-13 16:59:39 | 只看该作者
全局:
本帖最后由 ztztzt8888 于 2020-9-13 17:22 编辑

我从来都是用Deque,熟练掌握一个就行。只有极个别的时候(比如LC第17题,返回的是List,用Deque还需要转成List才能返回)才考虑勉强可以用class(也就是LinkedList)而不是interface去声明参数。毕竟其实用具体的类声明参数违反了dependency inversion principle,算是anti-pattern。虽然不会因为这么点事儿挂掉,但如果那么写了,最好在面试时还是提一嘴,说我是为了面试省时间才这么写的,心里明在真实的生产代码里要面向interface编程。
回复

使用道具 举报

全局:
如果直接按照楼主定义,其实这里的stack就是linkedlist。

。。。自作主张写点:
向上造型

向上造型是把一个对象赋值给父类。
比如说 Animal eagle = new Eagle();
此时,eagle这个对象只能调用Animal声明过的方法,如果没有声明过,那么就不能调用。
比如说老鹰会飞。。但是并不是所有的动物都会飞。。。所以这里的eagle是不能直接调用飞的方法的

回复

使用道具 举报

全局:
查了一下。。。Stack和LinkedList没有什么直接关系。。。最多算是表亲。。。
回复

使用道具 举报

🔗
wtmxs 2020-9-14 01:48:11 来自APP | 只看该作者
全局:
都2020了,怎么还有人不用ArrayDeque :(
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表