相关疑难解决方法(0)

为什么要启动具有初始容量的ArrayList?

通常的构造函数ArrayList是:

ArrayList<?> list = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

但是还有一个重载的构造函数,其初始容量有一个参数:

ArrayList<?> list = new ArrayList<>(20);
Run Code Online (Sandbox Code Playgroud)

ArrayList当我们可以随意添加时,为什么创建具有初始容量的产品很有用?

java arraylist capacity data-structures

147
推荐指数
5
解决办法
8万
查看次数

是否有必要将动态数组的容量加倍?

在 C 中创建自动扩展数组(如 C++ 的 std::vector)时,通常(或者至少是常见的建议)在每次填充时将数组的大小加倍,以限制调用量,以realloc避免尽可能复制整个数组。

例如。我们首先为 8 个元素分配空间,插入 8 个元素,然后为 16 个元素分配空间,再插入 8 个元素,再分配 32 个元素,等等。

realloc如果可以扩展现有的内存分配,则不必实际复制数据。例如,以下代码在我的系统上仅执行 1 次复制(初始 NULL 分配,因此它不是真正的副本),即使它调用了realloc10000 次:

#include <stdlib.h>
#include <stdio.h>

int main()
{
    int i;
    int copies = 0;
    void *data = NULL;
    void *ndata;

    for (i = 0; i < 10000; i++)
    {
        ndata = realloc(data, i * sizeof(int));
        if (data != ndata)
            copies++;
        data = ndata;
    }
    printf("%d\n", copies); 
}
Run Code Online (Sandbox Code Playgroud)

我意识到这个例子非常临床 - 现实世界的应用程序可能会有更多的内存碎片并且会做更多的副本,但即使我在循环之前进行一堆随机分配realloc,它也只会在 …

c

5
推荐指数
1
解决办法
2982
查看次数

标签 统计

arraylist ×1

c ×1

capacity ×1

data-structures ×1

java ×1