作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为学校作业编写自己的双向链表实现,我在列表类中使用了一个名为 Node
的内部节点类,它表示彼此链接的列表节点(如通常是链表的情况)。
class DoublyLinkedList<T>
{
class Node
{
T obj;
}
}
我想知道,对于具有许多节点的大型列表,由于每个 Node
对象都可能引用父列表类的一个实例,这是一个很大的开销和次优设计吗?作为非静态类当然很方便 - 然后节点可能会更改父列表 first
和 last
引用,我发现这非常适合封装。
如果我将 Node
设为静态,它就不能再(没有对列表的显式成员引用)用于操作父列表 first
和 last
我必须从另一个角度来处理它 - 列表将通过它自己的方法分配和操作节点,即将它们相互链接,取消链接并自然地调整它的 first
和最后
值。
为了好的设计和学习,我想知道什么是The Smart Thing To Do (c)(如果有的话)?
最佳答案
如果内部类不是static
,那么对父类的隐式引用已经存在,您可以从 Node 内部通过
类。DoublyLinkedList.this
引用它
无论如何,我不明白为什么 Node
类应该能够直接修改其父类的属性。改变列表的方法(所以 first
和 last
也是)应该属于 DoubleLinkedList
类,而不是直接属于 Node
类(class)。这正是为了封装,Node
实例不应该知道它包含在何处或如何从外部使用它。
关于java - 这个特定的内部非静态类是否有显着的开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15311803/
我是一名优秀的程序员,十分优秀!