ArrayList扩容机制(原理)

这篇具有很好参考价值的文章主要介绍了ArrayList扩容机制(原理)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ArrayList扩容的本质就是计算出新的扩容数组的size后实例化,并将原有数组内容复制到新数组中去。(不是原数组,而是新数组然后给予数组对象地址)。

默认情况下,新的容量会是原容量的1.5倍。 新容量=旧容量右移一位(相当于除于2)在加上旧容量

  ArrayList 的底层是用动态数组来实现的我们初始化一个ArrayList 集合还没有添加元素时,其实它是个空数组,只有当我们添加第一个元素时,内部会调用扩容方法并返回最小容量10,也就是说ArrayList 初始化容量为10。 当前数组长度小于最小容量的长度时(前期容量是10,当添加第11个元素时就就扩容),便开始可以扩容了,ArrayList 扩容的真正计算是在一个grow()里面,新数组大小是旧数组的1.5倍,如果扩容后的新数组大小还是小于最小容量,那新数组的大小就是最小容量的大小,后面会调用一个Arrays.copyof方法,这个方法是真正实现扩容的步骤。文章来源地址https://www.toymoban.com/news/detail-505797.html

到了这里,关于ArrayList扩容机制(原理)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 学习一下Java的ArrayList和contains函数和扩容机制

    在Leetcode上做题写了两种暴力解法,但是执行效率上不太一样。 时间上差很远,内存虽然差不多但是前者击败30%,后者击败94%。这两种解法区别是用一条 ArrayList 还是两条来存数据,所以contains虽然执行次数一样但是检测的长度上不一样,而且 ArrayList 的扩容次数也不一样,所

    2024年02月08日
    浏览(38)
  • ArrayList是如何动态扩容的

    ArrayList是Java中常用的动态数组实现,在底层是使用数组来存储元素。当需要扩展ArrayList的长度时,它会执行以下步骤: 初始化数组:在创建ArrayList对象时,会初始化一个初始长度的数组来存储元素。默认情况下,初始长度为10。 添加元素时的扩容:当往ArrayList中添加元素时

    2024年02月15日
    浏览(27)
  • ArrayList快速失败机制

    ArrayList实现了一种称为 快速失败 (fail-fast)的机制,该机制在并发修改时会抛出 ConcurrentModificationException 异常。 这种机制的实现原理是:ArrayList在遍历时会 记录列表的修改总数 (通过modCount字段),如果在遍历过程中列表结构发生变化,那么modCount的值会增大。 每次遍历前,迭代器都会

    2024年02月04日
    浏览(21)
  • vector扩容机制

    在学习了vector的时候,总说linux下是以二倍扩容的,VS是以1.5倍扩容的。 但是想一想为什么扩容是这样的呢,为什么不能是3倍或者其他倍数呢?  所以带着这些疑问,接着往下看。 首先,我们要知道vector的扩容机制:当向vector插入元素的时候,即当_finish == _end_of_storage,可能

    2024年01月15日
    浏览(27)
  • c++ vector的扩容机制

    1、当向vector push_back一个元素时,如果此时元素个数超过了vector的容量,会触发扩容 2、扩容的过程是:开辟新空间-拷贝旧空间的元素-释放旧空间 3、扩容过程中开辟新空间的大小影响着往vector插入元素的效率: 如果新空间大小为旧空间大小+1,也就是边插入边扩容,这样每

    2024年02月10日
    浏览(24)
  • redis源码之:扩容后的dictScan遍历顺序与JDK的concurrentHashMap 扩容机制

    进入正题前,先来复习下关于2次幂的mod运算 设n为2次幂,数a mod n 等价于 a n-1 从二进制来看,相当于余数为a省去n最高位左侧的所有位(含最高位),保留n右侧所有低位即为余数 如:a = 7(0000_0111),n=4(0000_0100),通过7 (4-1) 即0000_0111 0000_0011 结果为3(0000_0011) dictScan方法中,对游标

    2024年02月11日
    浏览(26)
  • 深入源码解析ArrayList:探秘Java动态数组的机制与性能

    1.1 介绍ArrayList的基本概念和作用 在Java中,ArrayList是一个实现了List接口的动态数组。它可以根据需要自动增加大小,因此可以存储任意数量的元素。 基本概念: ArrayList是Java中常用的集合类之一,它可以存储对象,并且可以根据索引访问和操作这些对象。 ArrayList是基于数组

    2024年02月04日
    浏览(31)
  • C++中STL的vector扩容机制

    前阵子面试的时候,被问到往vector中插入一个数据可能会发生什么? 我答:可能会 扩容 ; 为啥vector支持变长? 我答:它实在堆上动态申请内存,因此有自己的一套扩容机制,可以操作内存大小; 它有size()和capacity()记录当前的有效元素个数和容量, 还有配套的resize()管理实际存放

    2024年02月20日
    浏览(22)
  • Redis扩容机制与一致性哈希算法解析

    在分布式系统设计中,Redis是一个备受欢迎的内存数据库,而一致性哈希算法则是分布式系统中常用的数据分片和负载均衡技术。本文将深入探讨Redis的扩容机制以及一致性哈希算法的原理,同时提供示例代码以帮助读者更好地理解这两个重要概念。 Redis是一种高性能的内存数

    2024年02月11日
    浏览(36)
  • ArrayList底层的实现原理

    ArrayList底层的实现原理 ArrayList底层是用动态数组实现的 ArrayList初始化容量为0,当第一次添加数据的时候才会初始化为10。 ArrayList在进行扩容的时候是原来容量的1.5倍,每次扩容都需要拷贝数组。 ArrayList在添加数据的时候 确保数组已使用长度size+1之后足够存下下一个数据 计

    2024年01月22日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包