java - 为什么要以初始容量启动 ArrayList?

标签 java data-structures arraylist capacity

ArrayList 的常用构造函数是:

ArrayList<?> list = new ArrayList<>();

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

ArrayList<?> list = new ArrayList<>(20);

当我们可以随意追加内容时,为什么创建一个具有初始容量的 ArrayList 很有用?

最佳答案

如果您事先知道 ArrayList 的大小是多少,则指定初始容量会更有效。如果不这样做,随着列表的增长,内部数组将不得不重复重新分配。

最终列表越大,通过避免重新分配节省的时间就越多。

也就是说,即使没有预分配,在 ArrayList 后面插入 n 个元素也保证总共需要 O(n) 时间。换句话说,追加元素是一个摊销的常量时间操作。这是通过让每次重新分配以指数方式增加数组大小(通常增加 1.5 倍)来实现的。采用这种方法,操作总数can be shown to be O(n) .

关于java - 为什么要以初始容量启动 ArrayList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24508824/

相关文章:

java - 首先在 Java Web 应用程序中调用默认 servlet

java - Maven:org.codehaus.mojo:tomcat-maven-plugin:jar:2.2 的 POM 在哪里?

java - 使用 Gson 解析嵌套的 json 字符串

矩阵的Java数据结构?

c++ - 数组帮助中插入和修改函数的示例 (c++)

JAVA 读取数值数据并存储到数组列表

java - 如何在 apache Camel (spring) 中测试路由

algorithm - 如何压缩指针?例如。任意位指针

c++ - C++ 中 int 到 string 的错误转换

java - 使用 Tuple(double,int,int) 的数组列表比两个数组列表慢