JDK1.8 ArrayList数组源码

序言

ArrayList底层通过数组实现。

ArrayList即动态数组,实现了动态的添加和减少元素。

 

需要注意的是,容量拓展,是创建一个新的数组,然后将旧数组上的数组copy到新数组,这是一个很大的消耗

所以在我们使用ArrayList时,最好能预计数据的大小,在第一次创建时就申请够内存。这就是许多博客说在第一次创建就申请够足够内存的原因。

复制代码
    /**
     * Increases the capacity to ensure that it can hold at least the
     * number of elements specified by the minimum capacity argument.
     *
     * @param minCapacity the desired minimum capacity
     */
    private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
grow扩容函数
复制代码

 

资料

https://blog.csdn.net/qq_26323323/article/details/86080902

https://blog.csdn.net/weixin_40374341/article/details/86492378

posted @   ~沐风  阅读(170)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2018-04-08 springcloud(二):注册中心Eureka

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示