ArrayList底层是用数组实现,但数组长度是有限的,如何实现扩容?

简介: ArrayList底层是用数组实现,但数组长度是有限的,如何实现扩容?

ArrayList底层是用数组实现,但数组长度是有限的,如何实现扩容?


当新增元素,ArrayList放不下该元素时,触发扩容。 扩容的容量将会是原容量的1/2,也就是新容量是旧容量的1.5倍。

private void grow(int minCapacity) { 
  int oldCapacity = elementData.length; 
  //新容量=旧容量+1/2旧容量 
  int newCapacity = oldCapacity + (oldCapacity >> 1); 
  if (newCapacity - minCapacity < 0) 
    newCapacity = minCapacity; 
  if (newCapacity - MAX_ARRAY_SIZE > 0) 
    newCapacity = hugeCapacity(minCapacity); 
  elementData = Arrays.copyOf(elementData, newCapacity); 
}

执行扩容时使用系统类System的数组复制方法arraycopy()进行扩容。

扩容的源码:

public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) { 
  @SuppressWarnings("unchecked") 
  T[] copy = ((Object)newType == (Object)Object[].class) 
  ? (T[]) new Object[newLength] 
  : (T[]) Array.newInstance(newType.getComponentType(), newLength);
   System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); 
   return copy; 
}
相关文章
|
Java Nacos Docker
在集成nacos时,端口9848报错但服务器的这个端口是开放的
在集成nacos时,端口9848报错但服务器的这个端口是开放的【1月更文挑战第14天】【1月更文挑战第67篇】
2086 1
|
6月前
|
前端开发 安全 JavaScript
强密码生成器 (Password Generator) 技术实现揭秘
这是一款纯前端强密码生成器,支持自定义长度与字符类型,采用密码学安全随机算法;具备一键复制、玻璃拟态UI、响应式交互及SEO优化,全程本地运行,保障隐私安全。
828 9
|
数据采集 Web App开发 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
随着互联网的发展,网页数据抓取已成为数据分析和市场调研的关键手段。Puppeteer是一款由Google开发的无头浏览器工具,可在Node.js环境中模拟用户行为,高效抓取网页数据。本文将介绍如何利用Puppeteer的高级功能,通过设置代理IP、User-Agent和Cookies等技术,实现复杂的Web Scraping任务,并提供示例代码,展示如何使用亿牛云的爬虫代理来提高爬虫的成功率。通过合理配置这些参数,开发者可以有效规避目标网站的反爬机制,提升数据抓取效率。
1320 5
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
|
7月前
|
监控 网络安全 iOS开发
|
12月前
|
前端开发 Java API
Spring Cloud Gateway Server Web MVC报错“Unsupported transfer encoding: chunked”解决
本文解析了Spring Cloud Gateway中出现“Unsupported transfer encoding: chunked”错误的原因,指出该问题源于Feign依赖的HTTP客户端与服务端的`chunked`传输编码不兼容,并提供了具体的解决方案。通过规范Feign客户端接口的返回类型,可有效避免该异常,提升系统兼容性与稳定性。
825 0
|
存储 人工智能 算法
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
1005 23
|
存储 小程序 数据库
阿里云学生服务器申请流程_学生党免费领7个月学生机
阿里云2024年推出学生优惠,大陆在籍学生可免费申领7个月学生服务器,配置为2核2G,无限流量,含独立IP。学生需注册账号、完成实名及学生认证,首月免费,完成任务可续费6个月。此外,还有300元无门槛优惠券可在阿里云高校计划中领取,适用于多种云产品。申请及优惠详情见官方链接。
10103 4
阿里云学生服务器申请流程_学生党免费领7个月学生机
|
机器学习/深度学习 人工智能 Anolis
手把手教学攻略:在Anolis OS上部署OpenVINO深度学习模型
Anolis OS 作为国内首个正式提供 OpenVINO 开发包和镜像的服务器端操作系统,推动国内 AI 推理生态和能力的升级。
|
前端开发 JavaScript Java
java实现文件对比
基于java实现类似于svn的文件对比功能及效果,该对比适用于html,js,css,text等
java实现文件对比
|
Linux Anolis 芯片
centos升级龙蜥
centos升级龙蜥
1575 0