ArrayList源码解析:了解其扩容机制与遍历实现

风吹麦浪 2024-11-19T14:03:14+08:00
0 0 178

在Java中,ArrayList是一个非常常用的集合类,它实现了List接口,采用可变大小的数组来存储元素。在本篇博客中,我们将对ArrayList的源码进行解析,重点了解其扩容机制与遍历实现。

ArrayList的扩容机制

ArrayList在添加元素时需要考虑到数组容量的问题,当数组容量不足时就需要进行扩容操作。ArrayList在进行扩容时会调用grow方法来实现扩容,并且会将数组容量扩大为原来的1.5倍。

private void grow(int minCapacity) {
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    if (newCapacity < minCapacity) {
        newCapacity = minCapacity;
    }
    elementData = Arrays.copyOf(elementData, newCapacity);
}

grow方法中,首先获取原数组的容量oldCapacity,然后计算出新数组的容量newCapacity,最后使用Arrays.copyOf方法将元素拷贝到新数组中。这样就实现了ArrayList的扩容操作。

ArrayList的遍历实现

ArrayList的遍历可以使用迭代器或者forEach循环来实现,迭代器是最常用的遍历方式,可以通过iterator方法获取ArrayList的迭代器。

Iterator<T> it = arrayList.iterator();
while (it.hasNext()) {
    T element = it.next();
    // do something with element
}

除了迭代器,ArrayList还支持使用forEach循环来遍历元素,可以通过forEach方法传入一个Consumer函数来实现。

arrayList.forEach(element -> {
    // do something with element
});

无论是使用迭代器还是forEach循环,都可以方便地遍历ArrayList中的所有元素。

通过本篇博客的源码解析,我们了解了ArrayList的扩容机制与遍历实现,这对于我们深入理解ArrayList的内部实现和使用方法非常有帮助。希望本篇博客对你有所帮助,欢迎持续关注我们的博客和技术分享。

相似文章

    评论 (0)