【Java】ArrayList扩容规则

news2024/11/15 17:27:00

文章目录

  • 初始大小
  • 扩容规则
  • 总结

初始大小

ArrayList的初始大小由你选定的构造函数决定,如果你使用无参构造函数,那么初始大小为0,是一个空数组。
在这里插入图片描述
而如果你选用有参数的构造函数,那么初始大小为你输入的大小
在这里插入图片描述
因此如果问你ArrayList的初始容量,不要直接回答10,而是回答0。

扩容规则

当ArrayList存储不下数据之后,就会发生扩容。
对于使用无参构造函数的ArrayList,那么初始容量是0,使用add方法添加元素之后,此时ArrayList的容量变为10。而且我们知道,ArrayList的每次扩容都是扩容当前容量的50%,也就是原本容量的1.5倍,当然,这里的新容量并不是直接使用乘法得到的,而是通过位运算,如下
在这里插入图片描述
而如果这次插入的数据量超过10了呢,也就是我一次性就直接插入了超过10个的数据怎么办?
是10不够然后直接扩容一个10的1.5倍得到一个15大小的数组嘛?
下面是答案
在这里插入图片描述
ArrayList会根据这次插入的元素如果与下一次扩容后大小的数组大小进行比较,选择一个较大值,也就是对于一个初始化的ArrayList,它下一次扩容后的数组大小为10,而当前插入的数据量为11,因此选择较大者,因此此时数组的大小为11,当然这个是由于addAll方法造成的。
在这里插入图片描述

总结

  • ArrayList()会使用长度为零的数组
  • ArrayList(int initialCapacity)会使用指定容量的数组
  • public ArrayList(Collection<? extends E> c)会使用c的大小作为数组容量
  • add(Object o)首次扩容为10,再次扩容为上次容量的1.5倍
  • addAll(Collection c)在没有元素时,扩容为Math.max(10,实际元素个数)
    有元素时为Math.max(原容量1.5倍,实际元素个数)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/59304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计基于springboot的4s店车辆管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

货架穿梭车控制方案

穿梭车控制系统结构示意图 系统组成结构示意图穿梭车服务端模块 PLC设备输出的控制客户端4个电机动作的开关量信号 共8个开关量信号&#xff0c;PNP电路接口,接线端子Q3.0&#xff5e;Q3.7&#xff1b;每个继电器由两个开关量的值共同作用&#xff0c;其控制表如下&#xff1a…

黑马程序员课程SpringMVC听课笔记

目录 SpringMVC概述 入门案例 使用Servlet技术开发web程序流程 使用SpringMVC技术开发web程序流程 导入pom.xml文件 UserController SpringMvcConfig ServletContainersInitConfig POST请求中文乱码处理 代参数GET请求 请求参数与传递 普通参数&#xff1a;请求参数名…

python -- PyQt5(designer)中文详细教程(一)Qt的基本功能

在介绍PyQt5中文详细教程前&#xff0c;如有需要安装PyQt5的同学可以在此 PyQt5安装详细教程_M_Q_T的博客-CSDN博客参考安装&#xff0c;里面有详细的安装内容。 下一章内容python -- PyQt5&#xff08;designer&#xff09;中文详细教程(二)菜单和工具栏 ​​​​​​​http:…

技术人员创业的第一步分析

概述&#xff1a;看完了本文&#xff0c;基本上可以了解确认自己所掌握的技术是否适合创业&#xff0c;如果不适合&#xff0c;不如找个大公司长期停留&#xff0c;也挺好的&#xff0c;免得折腾&#xff01;————————————————————前几天和一个朋友聊天&…

资源管理的部分

估算资源的活动的资源目录概述需求&#xff1a;设计思路实现思路分析1.估算的资源的资源的分解结构&#xff1a;获取资源2.虚拟团队3.CPO模型4.团队的5.资源日历建设团队团队一般成长规律形成 指导型管理风格认可奖励培训指标管理团队关于授权情商&#xff0c;领导力等控制资源…

排障必用的4款工具,帮你缩减排障时间!-网络工程师

Zen Load Balancer Zen Load Balancer是一个基于 Debian 的发行版&#xff0c;主要用于实现 TCP 的负载均衡。如果你在工作中遇到需要服务器负载均衡的功能&#xff0c;但又没有预算的时候&#xff0c;这个工具就能帮到你了。 可通过定制的脚本来检查后端的运行状态&#xff0c…

【java】3-获取线程引用与线程的属性

1.获取线程的引用 在创建一个线程之后&#xff0c;我们很有必要去获取当前线程实例的引用&#xff0c;以便能够观察到线程的一些属性&#xff0c;或是对于当前线程进行一系列的操作 调用Thread类的静态方法currentThread&#xff0c;我们便能拿到当前线程的引用 Thread.curr…

软件项目尾期,客户提新需求怎么办?

1、需求管理流程很关键 面对客户的需求要求&#xff0c;需求管理流程很关键。 在前期与用户签订合同时&#xff0c;可以增加一些相关条款&#xff0c;如限定用户提出需求变更的时间&#xff0c;规定何种情况的变更可以接受、拒绝接受或部分接受&#xff0c;还可以规定发生需求变…

[论文阅读] 颜色迁移-Linear Monge-Kantorovitch(MKL)

[论文阅读] 颜色迁移-Linear Monge-Kantorovitch(MKL) 文章: The Linear Monge-Kantorovitch Linear Colour Mapping for Example-Based Colour Transfer, [paper], [matlab代码] 1-算法原理 本文将颜色迁移变成数据分布的转换问题, 因而本文需要解决2个方面的问题, 如何描述…

Kettle BIGNUMBER TIMESTAMP 类型格式处理

一、问题描述 Kettle默认的格式化处理对BIGNUMBER列 ,把0 会强行写成0.0;对TIMESTAMP列强行写成如2021/12/31 16:51:55.000000000格式。从而引起不必要错误。 二、解决方案 最新的Kettle下载地址:https://udomain.dl.sourceforge.net/project/pentaho/Pentaho-9.3/client…

算法常见技巧 -快速幂及其相关应用

快速幂 题目 快速幂 典型题例&#xff1a; 给定 n 组 aia_iai​, bib_ibi​, pip_ipi​&#xff0c;对于每组数据&#xff0c;求出 aiba_i^baib​ modmodmod pip_ipi​的值。 示例 &#xff1a; 2 3 2 5 4 3 9思路 代码&#xff1a; /* 核心思路&#xff1a;反复平方法 …

【大数据入门核心技术-Hadoop】Hadoop非高可用集群搭建

目录 目录 一、Hadoop部署的三种方式 1、Standalone mode&#xff08;独立模式&#xff09; 2、Pseudo-Distributed mode&#xff08;伪分布式模式&#xff09; 3、Cluster mode&#xff08;集群模式&#xff09; 二、准备工作 1、/etc/hosts 2、关闭防火墙和禁用swap交…

计算机软考高项(信息系统项目管理师)、中项(系统集成项目管理工程师),统计师中级的一些备考经验

软考高项及中项 对于因各种原因需要拿工程系列职称的朋友&#xff0c;计算机软考高项和中项可能是性价比最高的副高级职称和中级职称&#xff0c;没有学历和工作经验的要求&#xff0c;是水平考试&#xff0c;即可以跳过初级、中级&#xff0c;直接考高级&#xff0c;也可以考…

[附源码]JAVA毕业设计九宫格日志网站(系统+LW)

[附源码]JAVA毕业设计九宫格日志网站&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&a…

# 智慧社区管理系统-核心信息管理-02物业收费管理

一 后端 1:entity package com.woniu.community.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data AllArgsConstructor NoArgsConstructor public class PropertyInfo {private int id;private int typeId;private Doub…

制作php的composer包

目录 1、初始化包 2、将代码推送到github远程仓库 3、为写好扩展包打上tag标签标记当前代码版本 4、将包发布到包管理平台 初始化包&#xff0c;生成 创建配置文件composer.json composer init composer init 按照引导就可以生成了 , 详细的引导解释如下 This command wil…

计算机图形学中的曲线问题——拉格朗日插值曲线绘制实践

拉格朗日插值曲线的绘制 限于篇幅&#xff0c;我们将在这篇文章中介绍拉格朗日插值曲线绘制实践&#xff0c;主文章链接&#xff1a; GGN_2015 计算机图形学中的曲线问题 在主文章中我们已经介绍了拉格朗日插值函数的绘制方法。给定一个函数必须通过的点的集合&#xff0c;保证…

学习spring源码的意义是什么呢?有什么高效的源码学习方式吗?

这不是准备跳槽了&#xff0c;所以最近摸鱼比较多一些&#xff0c;老大默许了&#xff0c;我觉得我老大还是很好的。也在网上看了一些资料&#xff0c;但是&#xff0c;我发现很多讲解注解的时候&#xff0c;对于一些可以直接点击源码查看的内容讲解的占多数&#xff0c;但是授…

【学习笔记】《Python深度学习》第六章:深度学习用于文本和序列

文章目录1 处理文本数据1.1 单词和字符的one-hot编码1.2 使用词嵌入1.3 从原始文本到词嵌入2 循环神经网络2.1 Keras中的循环层2.2 LSTM层和GRU层2.3 实例&#xff1a;使用 LSTM 进行 IMDB 电影评论分类3 循环神经网络的高级用法3.1 温度预测问题3.2 准备数据3.3 基于常识、非机…