Java 当可扩展数组';满了吗?

Java 当可扩展数组';满了吗?,java,arrays,arraylist,amortized-analysis,Java,Arrays,Arraylist,Amortized Analysis,我刚刚遇到这样一个问题,如果我们有一个动态分配的数组,则需要O(1)来进行插入。但是当数组已满时,我们需要为数组重新分配两倍空间,因此复制旧数组需要O(n) 我们有没有办法做到O(1) 我读过一些关于可扩展阵列的文章,但我不太明白。有人能帮我解释一下吗 非常感谢。每次分配两倍的空间形成一个几何级数。这意味着,虽然一些插入(触发扩展的插入)非常昂贵,但它们非常罕见,以至于摊销性能仍然为O(1)。例如,插入十亿个元素只需要30个加倍(2^30=1073741824)。每次分配两倍的空间形成几何级数。

我刚刚遇到这样一个问题,如果我们有一个动态分配的数组,则需要O(1)来进行插入。但是当数组已满时,我们需要为数组重新分配两倍空间,因此复制旧数组需要O(n)

我们有没有办法做到O(1)

我读过一些关于可扩展阵列的文章,但我不太明白。有人能帮我解释一下吗


非常感谢。

每次分配两倍的空间形成一个几何级数。这意味着,虽然一些插入(触发扩展的插入)非常昂贵,但它们非常罕见,以至于摊销性能仍然为O(1)。例如,插入十亿个元素只需要30个加倍(2^30=1073741824)。

每次分配两倍的空间形成几何级数。这意味着,虽然一些插入(触发扩展的插入)非常昂贵,但它们非常罕见,以至于摊销性能仍然为O(1)。例如,插入十亿个元素只需要30个双精度(2^30=1073741824)。

那么为什么不使用列表???@neerajain,因为列表需要O(n)才能插入到列表的末尾。@Zip不需要<代码>链接列表需要O(1)(尽管在其他情况下速度不是很快)
ArrayList
对于简单的非并发列表(无头删除)几乎总是最好的选择。你知道可扩展阵列吗?我刚刚听说我们可以使用它,所以我很好奇我们将如何使用可扩展数组。@Zip
ArrayList
是一个可扩展数组。没有什么理由不使用它。那你为什么不使用列表呢?@neerajain,因为列表需要O(n)才能插入到列表的末尾。@Zip不,它不需要<代码>链接列表需要O(1)(尽管在其他情况下速度不是很快)
ArrayList
对于简单的非并发列表(无头删除)几乎总是最好的选择。你知道可扩展阵列吗?我刚刚听说我们可以使用它,所以我很好奇我们将如何使用可扩展数组。@Zip
ArrayList
是一个可扩展数组。没有什么理由不使用它。