首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于这个特定的内部非静态类是否有很大的开销?

对于这个特定的内部非静态类是否有很大的开销?
EN

Stack Overflow用户
提问于 2013-03-09 14:29:59
回答 2查看 194关注 0票数 2

我正在为学校作业编写一个双链接列表的实现,我在列表类中使用一个名为Node的内部节点类,它表示相互链接的列表节点(通常是链接列表)。

代码语言:javascript
复制
class DoublyLinkedList<T>
{
    class Node
    {
        T obj;
    }
}

我想知道,对于具有许多节点的大型列表,因为每个Node对象都可能引用父list类的一个实例,这是一个很大的开销和次优设计吗?当然,作为一个非静态类很方便--那么节点可能会更改父列表firstlast引用,我发现这对于封装非常有用。

如果我使Node是静态的,它就不能再(如果没有显式成员引用列表)来操作父列表( firstlast ),我必须从相反的角度来处理它--列表将通过它自己的方法分配和操作节点,即将它们彼此链接起来,取消链接,并自然地调整其firstlast值。

为了好的设计和学习,我想知道是什么智能的东西做(c) (如果有的话)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-09 14:35:45

每个节点的开销将恰好是一个引用。假设除了有效负载之外,节点还具有一个先前的链接和一个反向链接,那么在额外的内存使用中,额外引用父节点的开销将达到大约33% (在3个现有内存的基础上有一个引用)。这是相当大的开销,特别是对于大的节点数和小的有效负载。另一方面,有效载荷越大,就不会有多大影响。

不过,一般来说,我不会对有效负载大小作出假设,而将Node类设为static

票数 2
EN

Stack Overflow用户

发布于 2013-03-09 14:33:57

如果内部类不是static,那么对父类的隐式引用已经存在,您可以通过DoublyLinkedList.thisNode类中引用它。

无论如何,我不明白为什么Node类应该能够直接修改其父类的属性。更改列表的方法(所以firstlast也是这样)应该属于DoubleLinkedList类,而不是直接属于Node类。这完全是为了封装,Node实例不应该知道它包含在哪里,或者它是如何从外部使用的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15311803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档