java中的LinkedList的源码Node结点为什么构造方法要带前后结点。

「已注销」 2019-03-28 03:57:46
jdk源码:
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;

Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}

对于结点来说,构造方法不是应该就传一个结点的数据“E”么,至于前后结点的概念不是应该在结点插入链表中才存在的么,所以构造方法应该就传“E”就可以了呀,等到Node插入List后,在给Node的prev next赋值,不然的话我new一个结点的时候我怎么知道他的前后结点。
...全文
353 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2019-04-03
  • 打赏
  • 举报
回复
引用 2 楼 千里送人头 的回复:
另外,楼主,你看它是 this.item this.next this.prev ,也就是说,即使在构造的时候,你只传入了一个 element,另外两个变量也是会占用内存空间的.所以,设计的时候,就直接将三个都传入,这样还有一个好处,就是判断当前节点是首节点还是尾节点.只需要判断prev跟next是否为null即可,如果我们不主动传null,那就无法判断啦,你如果判断为null,因为之前没有赋值,程序可能就直接crash了.
嗯嗯,先谢谢你的回答,我明白啦,谢谢
「已注销」 2019-04-03
  • 打赏
  • 举报
回复
引用 3 楼 FateKing丶 的回复:
这不就是个带参的构造函数吗,和你平时自己创建的对象有什么区别
我只是想说一个结点在创建时为啥就要带着前后结点,这样设计的目的是什么,楼上的解释我听明白了
FateKing丶 2019-04-02
  • 打赏
  • 举报
回复
这不就是个带参的构造函数吗,和你平时自己创建的对象有什么区别
千里送人头 2019-03-28
  • 打赏
  • 举报
回复
另外,楼主,你看它是 this.item this.next this.prev ,也就是说,即使在构造的时候,你只传入了一个 element,另外两个变量也是会占用内存空间的.所以,设计的时候,就直接将三个都传入,这样还有一个好处,就是判断当前节点是首节点还是尾节点.只需要判断prev跟next是否为null即可,如果我们不主动传null,那就无法判断啦,你如果判断为null,因为之前没有赋值,程序可能就直接crash了.
千里送人头 2019-03-28
  • 打赏
  • 举报
回复
楼主,这是他的设计模式,有些人可能会有这个需求的,比较他想开一个新的节点,跟之前的节点进行关联,这也是有可能的.一般我们用是不需要在构造的时候传入prev跟next的,我们直接设置成null就可以了.这并不影响我们的使用哦.

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧