通常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相关问答推荐

在未跨多次运行重写过go 的数据的情况下将数据写入到SON文件时遇到问题(使用Jackson)

Spring安全实现多个SQL表身份验证

无法在Java中将hhmmss格式的时间解析为LocalTime

无法传递消费者<;>;实例

如何配置ActiveMQ Artemis以使用AMQP 1.0和其他协议与Java

为什么JAVA&S清洁器使用链表而不是并发HashSet?

更新GWT 2.5.1到2.11.0和sencha GXT 3.1.1到4.1时出现错误

暂停计时器

由于 list 中的权限错误,Android未生成

多重延迟签名

如何在Microronaut中将 map 读取为 map

Spring安全令牌刷新和JWT签名与本地计算的签名不匹配

垃圾收集时间长,会丢弃网络连接,但不会在Kubernetes中反弹Pod

将关闭拍卖的TimerService

如何在SWT菜单项文本中保留@字符

如何使用WebEnvironment.RANDOM_PORT获得第二个随机端口?

Java System.getProperty在哪里检索user.home?

如何在特定关键字后提取与模式匹配的多个值?

OpenJDK20:JEP434:Foreign Function&;内存API(第二次预览)

ResponseEntity.控制器截断响应的JSON部分