【问题标题】:what is the space complexity of a list inside for loop?for循环内列表的空间复杂度是多少?
【发布时间】:2019-10-10 14:26:56
【问题描述】:

For 循环内创建具有相同名称的新 List 时。这意味着计算一次空间复杂度还是每次循环都计算它。让我们说:

for (int u = 0; u < 5; u++) {

                List<String> fileNameList = new ArrayList<String>();
                fileNameList.add(concatinateFileWithTf);
  }

在前面的示例中,我为每个循环创建了fileNameList,但名称相同。这是否意味着我创建了新列表并且每次都应该计算其空间复杂度,或者它为此列表进行恢复?

【问题讨论】:

    标签: java algorithm


    【解决方案1】:

    这是否意味着我创建了新列表并且每次都应该计算其空间复杂度

    是的。

    来自new ArrayList&lt;&gt;();的javadoc:

    构造一个初始容量为 10 的空列表。

    因此,每次迭代都会为大小为 1、容量为 10 的列表分配内存。

    询问是否还不清楚。

    【讨论】:

    • 实际上,由于 Java 8 的空 ArrayList 实例重用静态 Object[0] 数组,减少了内存占用。 @shsa,看看第 156 行和第 195 行 here,它可能会对你有所帮助。
    • @Woland,如果它在每个循环中创建一个新的列表,从上一个循环生成的前一个列表发生了什么?它是从内存中删除还是分配了多个同名的列表?请可以你给我澄清一下?
    • @shsa "previous List" 存在于堆中,直到 GC 收集并将他从内存中删除。取决于 GC 算法。 JVM 在内部不按对象的名称跟踪对象。我不确切知道,但可以假设它使用哈希码或类似的东西。
    • @shsa 你可以从这个链接开始artima.com/insidejvm/ed2/jvm6.html :)
    • @Woland,这意味着如果我将值存储在 for 循环中声明的变量中,它每次都会创建这个变量。假设:'for (int i = 0; i
    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多