通常ArrayList
的构造函数是:
ArrayList<?> list = new ArrayList<>();
但也有一个重载构造函数,其初始容量有一个参数:
ArrayList<?> list = new ArrayList<>(20);
当我们可以随心所欲地追加容量时,为什么创建一个初始容量为ArrayList
的应用程序很有用?
通常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)
次.