深入源码解析ArrayList:探秘Java动态数组的机制与性能
public class ArrayList<E> {
// 存储ArrayList元素的数组
private transient Object[] array;
// ArrayList的大小
private int size;
// 默认构造函数,初始容量为10
public ArrayList() {
array = new Object[10];
}
// 获取ArrayList的大小
public int size() {
return size;
}
// 在ArrayList末尾添加元素
public void add(E element) {
// 确保数组容量足够
if (size == array.length) {
// 默认扩展为原来的1.5倍
Object[] newArray = new Object[array.length + (array.length >> 1)];
System.arraycopy(array, 0, newArray, 0, array.length);
array = newArray;
}
array[size++] = element;
}
// 获取指定位置的元素
@SuppressWarnings("unchecked")
public E get(int index) {
if (index >= size) {
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
return (E) array[index];
}
// ...其他方法略...
}
这个简化版的ArrayList实现展示了Java数组动态扩展的机制,并且演示了如何通过索引获取元素。它省略了错误检查和边界条件的处理,以及其他可能的方法,以保持精简。这个例子旨在教育开发者如何实现动态数组,并且展示了Java数组复制和泛型的基本概念。
评论已关闭