Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 树的2-3个节点浪费了哪些信息?_Java - Fatal编程技术网

Java 树的2-3个节点浪费了哪些信息?

Java 树的2-3个节点浪费了哪些信息?,java,Java,假设我有一个2-3树的节点类。每个节点可以存储2个数据元素,最多可以存储3个子节点。如果树中有一个节点,则存储1个数据元素,并且没有子节点。此节点浪费了多少存储空间 这取决于要存储在树中的数据。 假设您希望在树中存储对象、字符串或其他复杂数据类型。然后你有两个指针,一个用于永久对象,三个用于子对象。即使指针未初始化/指向null,节点也需要空间。因此,内存使用率为1/5 例如: 图像您拥有以下类: class Node { Object data1 = new Data(); O

假设我有一个2-3树的节点类。每个节点可以存储2个数据元素,最多可以存储3个子节点。如果树中有一个节点,则存储1个数据元素,并且没有子节点。此节点浪费了多少存储空间

这取决于要存储在树中的数据。 假设您希望在树中存储对象、字符串或其他复杂数据类型。然后你有两个指针,一个用于永久对象,三个用于子对象。即使指针未初始化/指向null,节点也需要空间。因此,内存使用率为1/5

例如:

图像您拥有以下类:

class Node {
    Object data1 = new Data();
    Object data2 = null;
    Node child1 = null;
    Node child2 = null;
    Node child3 = null;
}
创建此类对象时,VM需要为新对象保留内存。因此VM知道这个类中有5个不同的属性。每个属性都是一个对象,因此需要为5个指针留出空间。指针实际指向的位置并不重要,因为它只是指针中的值。空指针只是指向无效地址的指针,例如0x00000000,但这取决于操作系统

因此,用于存储数据1和数据2的内存完全相同。当然,data1指向一个有效地址,还有一个对象也需要内存

那么,当对象被创建时,会发生什么呢? 让我们假设对象是在堆上的堆栈上创建的,它将完全相同。VM在堆栈上逐个“推送”每个属性。我不确定确切的顺序,但我会假设从上到下是data1,data2,child1。在这种情况下,保留5倍32位或64位,具体取决于您的体系结构。我就叫他们单词,我记不起正确的表达方式了。每个单词的值现在是一个随机值——存储在这些存储单元中的值。接下来,为每个字添加正确的值,因此将null 0x00000000写入内存单元。对于data1,搜索一个空闲地址,然后在那里重新开始


我希望我想说的很清楚

你有这方面的文件吗?我真的很感兴趣,我从来没有想过它,也不记得在我读过的任何文档中看到过它。你说文档是什么意思?我对2-3棵树一无所知,我甚至不知道有这样的东西存在:P,这更像是对象一般如何存储在内存中,特别是在堆栈上。@zgc7009我可以编辑我要添加的帖子。更详细的描述包括一个示例,如果您对它感兴趣。文档中说,如果将节点设置为null,它将为节点中包含的内容分配空间。你从哪里学来的?如果你有一个2-3树,父节点中有一个项目,并将3个子节点设置为null,我认为它的空间效率应该是50%。那么,空间效率应该是50%或20%?