(相关资料图)
JDK1.7通过无参构造方法(初始长度默认10,以默认的大小来初始化内部的数组)、有参构造方法对数组进行初始化。
通过判断,如果够则不进行操作;容量不够就扩充来确保内部容量。
1. ensureCapacityInternal方法名的英文大致是“确保内部容量”,size表示的是执行添加之前的元素个数,并非ArrayList的容量,容量应该是数组elementData的长度。ensureCapacityInternal该方法通过将现有的元素个数数组的容量比较。看如果需要扩容,则扩容。
2. 是将要添加的元素放置到相应的数组中。
根据传入的最小需要容量minCapacity来和数组的容量长度对比,如果minCapacity大于或等于数组容量,则需要进行扩容。
private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; // jdk1.7采用位运算比以前的计算方式更快 int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; //jdk1.7这里增加了对元素个数的最大个数判断,MAX_ARRAY_SIZE 为int最大值减去8。 if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win: // 最重要的复制元素方法 Arrays.copyOf() elementData = Arrays.copyOf(elementData, newCapacity); }
综述:ArrayList在第一次插入元素add()时分配10(默认)个对象空间。假如有20个数据需要添加,那么会在第11个数据的时候(原始数组容量存满时),按照1.5倍增长;
之后扩容会按照1.5倍增长(10、15、22、、、)。
每次扩容都是通过Arrays.copyOf(elementData, newCapacity) 这样的方式实现的。ArrayList的自动扩容机制底层借助于System实现System.arraycopy(0,oldsrc,0,newsrc,length);
到此这篇关于关于Java的ArrayList数组自动扩容机制的文章就介绍到这了,更多相关ArrayList数组自动扩容内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
标签:
上一篇 : 世界热门:中信债券:如何看待存款利率下调?
下一篇 : 最后一页
3月16日,盛和资源(600392)副总经理毛韶春、黄厚兵,财务总监夏兰田,董秘郭晓雷,通过上交所集中竞价交...
2022年3月15日,这是继1983年以来的第40个国际消费者权益日。中消协组织围绕共促消费公平消费维权年主题...
首批金控牌照的归属出炉,两家公司拿到许可证。3月17日,央行发布公告称,已批准中国中信金融控股有限公...
时隔半月之久,西宁市城北区逐步推动复工复产,往日的生机活力被渐渐寻回,牛肉面红油飘香、包子铺炊烟...
音乐是我生活的一部分,是我的梦想,也是我的事业。英国音乐人亚当(Adam)告诉记者,在中国的十几年里,...
Copyright © 2015-2022 华南舞蹈网版权所有 备案号:粤ICP备18025786号-52 联系邮箱: 954 29 18 82 @qq.com