热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

ArrayList的自动扩充机制实例解析

本文主要介绍了ArrayList的自动扩充机制,由一个题目切入主题,逐步向大家展示了ArrayList的相关内容,具有一定参考价值,需要的朋友可以了解下。

用一道选择题作为本文的开始吧!

ArrayList list = new ArrayList(20);中的list扩充几次

A.0
B.1
C.2
D.3

答案:A

1、ArrayList的默认初始容量为10,当然也可以自定义指定初始容量,随着动态的向其中添加元素,其容量可能会动态的增加,那么扩容的公式为:

新容量 = 旧容量/2 + 旧容量

比如:初始容量为4,其容量的每次扩充后的新容量为:4->6->9->13->19->…

即每次扩充至原有基础的1.5倍

ArrayList的构造函数总共有三个:

(1)ArrayList()构造一个初始容量为 10 的空列表。
(2)ArrayList(Collection<&#63; extends E> c)构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
(3)ArrayList(int initialCapacity)构造一个具有指定初始容量的空列表。

调用的是第三个构造函数,直接初始化为大小为20的list,没有扩容,所以选择A

如果初始化为ArrayList(0),则会在新容量计算完毕后,增加至1;

另外与之类似的还有,

2、HashMap的初始大小为16,增长时,直接容量翻番,如源代码。

void addEntry(int hash, K key, V value, int bucketIndex) { 
    if ((size >= threshold) && (null != table[bucketIndex])) { 
      resize(2 * table.length);//原容量2倍 
      hash = (null != key) &#63; hash(key) : 0; 
      bucketIndex = indexFor(hash, table.length); 
    } 
    createEntry(hash, key, value, bucketIndex); 
} 

3、Vector的初始大小为10,如果没有指定每次增长的大小,则默认是翻倍增长。

总结

以上就是本文关于ArrayList的自动扩充机制实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Spring Java-based容器配置详解、ArrayList在for循环中使用remove方法移除元素方法介绍等,有什么问题可以随时留言,小编会及时回复大家的,感谢朋友们对本站的支持!


推荐阅读
  • 本项目在Java Maven框架下,利用POI库实现了Excel数据的高效导入与导出功能。通过优化数据处理流程,提升了数据操作的性能和稳定性。项目已发布至GitHub,当前最新版本为0.0.5。该项目不仅适用于小型应用,也可扩展用于大型企业级系统,提供了灵活的数据管理解决方案。GitHub地址:https://github.com/83945105/holygrail,Maven坐标:`com.github.83945105:holygrail:0.0.5`。 ... [详细]
  • 深入解析 Vue 中通过 $route.params 实现参数传递的方法与技巧
    本文深入探讨了在 Vue 框架中利用 `$route.params` 进行参数传递的方法和技巧。通过详细解析 `$route.params` 的工作机制及其与 `$route.query` 的区别,帮助开发者更好地理解和应用这一功能。文章不仅涵盖了基本的使用方法,还提供了实际案例和最佳实践,以便读者能够灵活运用这些技术,提升开发效率和代码质量。 ... [详细]
  • 进程(Process)是指计算机中程序对特定数据集的一次运行活动,是系统资源分配与调度的核心单元,构成了操作系统架构的基础。在早期以进程为中心的计算机体系结构中,进程被视为程序的执行实例,其状态和控制信息通过任务描述符(task_struct)进行管理和维护。本文将深入探讨进程的概念及其关键数据结构task_struct,解析其在操作系统中的作用和实现机制。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 如何在Ubuntu系统中直接使用Snap安装软件
    Canonical与Opera Software近日宣布,基于Chromium的Opera浏览器现已作为Snap包提供给Ubuntu用户,显著提升了在Linux操作系统上的安装便捷性和兼容性。通过Snap,用户可以在Ubuntu系统中轻松安装和更新Opera浏览器,享受更流畅的浏览体验。此外,Snap的容器化特性还确保了应用的安全性和稳定性,为用户提供更加可靠的软件环境。 ... [详细]
  • 从用户转型为开发者:一场思维升级的旅程 | 专访 StarRocks Committer 周威
    从用户转变为开发者,不仅是一次角色的转换,更是一场深刻的思维升级之旅。本次专访中,StarRocks Committer 周威分享了他如何在这一过程中逐步提升技术能力与思维方式,为开源社区贡献自己的力量。 ... [详细]
  • 在处理大规模并发请求时,传统的多线程或多进程模型往往无法有效解决性能瓶颈问题。尽管它们在处理小规模任务时能提升效率,但在高并发场景下,系统资源的过度消耗和上下文切换的开销会显著降低整体性能。相比之下,Python 的 `asyncio` 模块通过协程提供了一种轻量级且高效的并发解决方案。本文将深入解析 `asyncio` 模块的原理及其在实际应用中的优化技巧,帮助开发者更好地利用协程技术提升程序性能。 ... [详细]
  • Jedis接口分类详解与应用指南
    本文详细解析了Jedis接口的分类及其应用指南,重点介绍了字符串数据类型(String)的接口功能。作为Redis中最基本的数据存储形式,字符串类型支持多种操作,如设置、获取和更新键值对等,适用于广泛的应用场景。 ... [详细]
  • 深入解析Spring Boot自动配置机制及其核心原理
    Spring Boot 的自动配置机制是其核心特性之一,旨在简化开发过程并提高效率。本文将深入探讨这一机制的工作原理,解释其如何通过智能化的类路径扫描和条件注解实现自动装配。通过对 Spring Boot 自动配置的详细解析,读者将能够更好地理解和应用这一强大功能,从而在实际项目中更加高效地利用 Spring Boot。 ... [详细]
  • 个人学习进阶:深入解析Tomcat架构体系(第一部分)
    大家好,欢迎来到X的技术分享。近期我一直在深入研究Tomcat的架构体系,收获颇丰。作为一款广泛使用的应用服务器,Tomcat的架构设计非常精妙,对理解和优化Web应用具有重要意义。在本系列的第一部分中,我将详细解析Tomcat的核心组件及其工作原理,帮助读者建立坚实的基础。希望这些内容能为大家的学习和实践带来启发。 ... [详细]
  • 如何正确配置与使用日志组件:Log4j、SLF4J及Logback的连接与整合方法
    在当前的软件开发实践中,无论是开源项目还是日常工作中,日志框架都是不可或缺的工具之一。本文详细探讨了如何正确配置与使用Log4j、SLF4J及Logback这三个流行的日志组件,并深入解析了它们之间的连接与整合方法,旨在帮助开发者高效地管理和优化日志记录流程。 ... [详细]
  • 如何解决Windows 7系统中电脑公司遇到的文件夹访问权限问题
    如何解决Windows 7系统中电脑公司遇到的文件夹访问权限问题 ... [详细]
  • Spring注解开发指南:@Resource与@Component详解 ... [详细]
  • 深入理解 CSS 盒模型、box-sizing 属性及定位元素的水平和垂直居中技巧
    深入理解 CSS 盒模型、box-sizing 属性及定位元素的水平和垂直居中技巧 ... [详细]
  • Django新手指南:第三步——构建你的首个项目
    在本教程中,我们将引导你完成创建第一个Django应用的步骤。通过实际操作,你将逐步了解Django框架的核心概念和基本功能。从项目结构到视图和模板的实现,我们将详细介绍每个环节,帮助你快速上手并构建出一个功能完整的Web应用。 ... [详细]
author-avatar
手机用户2502901613
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有