[英]Is there significant overhead for this particular inner non-static class?
我正在編寫自己的用於學校作業的雙向鏈接列表的實現,並且在列表類內部使用了一個稱為Node
的內部節點類,該內部節點類表示彼此鏈接的列表節點(通常是鏈接列表的情況)。
class DoublyLinkedList<T>
{
class Node
{
T obj;
}
}
我想知道,對於具有多個節點的大型列表,由於每個Node
對象都可以引用父列表類的一個實例,因此這是否是一項重大的開銷和次優的設計? 作為非靜態類肯定很方便-然后節點可以更改父列表的first
和last
引用,我發現這對於封裝非常有用。
如果我將Node
設為靜態,則無法再使用它(沒有對列表的顯式成員引用) first
和last
操作父列表,而我不得不從另一種方式來處理它-列表將通過以下方式分配和操作節點它自己的方法,即將它們彼此鏈接,取消鏈接並自然地調整其first
和last
值。
為了良好的設計和學習,我想知道什么是聰明的事(c) (如果有)?
如果內部類不是static
則已經存在對父類的隱式引用,您可以從Node
類內部通過DoublyLinkedList.this
進行引用。
無論如何,我看不出為什么Node
類應該能夠直接修改其父類的屬性。 更改列表的方法(同樣也是first
和last
)應該是DoubleLinkedList
類的,而不是Node
類的。 正是出於封裝的目的, Node
實例不應該知道它的包含位置或如何從外部使用它。
開銷恰好是每個節點一個參考。 假設除有效負載外,該節點還具有一個先行鏈接和一個反向鏈接,那么在額外的內存使用中,對父級的額外引用的開銷將約為33%(在3個現有引用的基礎上增加1個引用)。 這是相當大的開銷,尤其是對於大量節點和較小有效負載而言。 另一方面,對於較大的有效負載,這沒什么大不了的。
不過,總的來說,我不會假設有效負載大小,而是將Node類設置為static
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.