栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java8 arraylist底层

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java8 arraylist底层

 几个常量值注意,defaultcapacity_empty_elementdata与empty_elementdata的区别,虽然都是空数组,但是defaultcapacity_empty_elementdata是在无参构造函数里面使用的,而empty_elementdata是在有参构造函数时,capacity=0时使用的!

这是有参构造函数,其中参数是容量,注意第二个else if

 

 这是无参构造函数

calculateCapacity函数主要是计算扩增后的数组大小,在函数体内可以看到,当数组是无参构造而来的初始状态时,会取10和mincapacity的最大值。当有参构造哪怕是0时,也只会返回capacity!

 计算出capacity后,就要进行容量扩展了,下面是扩展的重点

 grow函数会计算当前数组的capacity的1.5倍,也就是newcapacity,拿这个值和期望扩展的容量进行比较,如果mincapacity大,就扩展为mincapacity,否则去比较一下newcapacity的容量,因为是按扩展0.5倍的规则,所有有可能会溢出,当newcapacity>Integer.MAX-8时,我去看看minCapacity合不合适

 可以看到如果mincapacity大于Integer.MAX-8就取Integer.MAX

 看一下remove函数,其实原理很简单,学过c++的都应该知道,例如要删除index处的元素,那么就只要把index后面的元素依次往前面移动一个位置

 它可以实现将一个数组的指定个数元素复制到另一个数组中

直接举例:

arrayCopy( arr1, 2, arr2, 5, 10);

意思是;将arr1数组里从索引为2的元素开始, 复制到数组arr2里的索引为5的位置, 复制的元素个数为10个. 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007571.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号