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/