ArrayList的本质是一个 对数组进行了封装的类
在进行ArrayList 对象的初始化时,默认创建一个长度为10的数组(或传入的数值)
ArrayList的构造器:
public ArrayList(int initialCapacity) {
//传入存储大小的初始化
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
this.elementData = EMPTY_ELEMENTDATA;
} else {
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}
public ArrayList() {
// 默认初始化
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
public ArrayList(Collection<? extends E> c) {
// 接收一个Collection 接口的实现类,转化为ArrayList
Object[] a = c.toArray();
if ((size = a.length) != 0) {
if (c.getClass() == ArrayList.class) {
elementData = a;
} else {
elementData = Arrays.copyOf(a, size, Object[].class);
}
} else {
// replace with empty array.
elementData = EMPTY_ELEMENTDATA;
}
}
通过Add方法向实例中添加元素,size 属性用来记录当前List的 长度,当传入新的要被添加的元素时,
ArrayList 使用内部重载的add方法 ,接收 新的元素,数组,和数组长度。再判断当前对象是否需要扩容
private void add(E e, Object[] elementData, int s) {
if (s == elementData.length)
elementData = grow();
elementData[s] = e;
size = s + 1;
}
当判断当前对象的存储大小不满足于存储对象的大小时,创建增加原来长度1/2的新数组,并将原数组中的元素移入新的数组中。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库