java - 在 ArrayList 或 Map 中添加树/图的 n 个节点的空间复杂度

标签 java oop arraylist space-complexity

假设我们有一棵二叉树

class node {
   int data;
   node left;
   node right;
}

现在假设我创建一个 ArrayList<node>并在其中添加所有 n 个节点,它的空间复杂度是常数还是 n

我的困惑是,因为 node不是原始数据结构而是对象,它必须使用 CALL BY REFERENCE ,因此它不应该使用额外的空间来更改节点的类实例中的某些数据,从而在 ArrayList<> 中进行更改

此外,我推测 ArrayList<type> abc = xyz; //another arraylist of same type使用 CALL BY REFERENCE因此它使用常量空间,但是 ArrayList<type> abc = new ArrayList<>(xyz)创建一个新实例,因此它应该使用额外的空间。

现在,当我在 ArrayList<node> 中添加类实例时我必须用 new 初始化数组列表关键词,ArrayList<node> abc = new ArrayList<>();在我将实例添加到列表之前。所以它应该使用额外的空间,但由于我们使用的是已经在树中定义的类实例,并且树中的任何更改也会反射(reflect)在列表中,因此它应该使用常量空间。以上哪项是正确的,我哪里错了?

编辑:我知道即使引用也会占用一些空间,但它不会比对象最初占用的实际内存空间少很多吗?

最佳答案

node is not a primitive data structure but an object

Java 中没有对象变量/字段。只有原始变量和引用变量。

it must use CALL BY REFERENCE

Java 只能按值调用。原语按值传递,引用按值传递。

when I am adding class instances in ArrayList

这在 Java 中不受支持。您只能添加引用。

So it should use extra space

只有添加的引用才会使用额外的空间。不复制对象。

关于java - 在 ArrayList 或 Map 中添加树/图的 n 个节点的空间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50704755/

相关文章:

java - 将特定项目移动到列表末尾

java - 添加到 hashmap 和 arraylist

java - 使用Java在MySql数据库中插入汉字

java - Android 小部件点击时波纹背景

JavaScript 类函数

iphone - 私有(private)合成属性(property)是矛盾的吗?

java - 如何检查数据库中的值 Java

java - 处理不同的 JSON 请求 Jackson

c++ - 模板化成员函数不能从同一个类调用非模板化成员函数,C++

Java ArrayList Iterator next() 没有按预期工作