开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情
简介
ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity 操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。
它继承于 AbstractList,实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。
在我们学数据结构的时候就知道了线性表的顺序存储,插入删除元素的时间复杂度为O(n),求表长以 及增加元素,取第 i 元素的时间复杂度为O(1)
ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
ArrayList 实现了RandomAccess 接口, RandomAccess 是一个标志接口,表明实现这个这个接口的 List 集合是支持快速随机访问的。在 ArrayList 中,我们即可以通过元素的序号快速获取元素对象,这就是快速随机访问。
ArrayList 实现了Cloneable接口,即覆盖了函数 clone(),能被克隆。ArrayList 实现 java.io.Serializable 接口,这意味着ArrayList支持序列化,能通过序列化去传输。
和 Vector 不同,ArrayList 中的操作不是线程安全的!所以,建议在单线程中才使用 ArrayList, 而在多线程中可以选择 Vector 或者 CopyOnWriteArrayList。
成员变量
ArrayList 底层是基于数组来实现容量大小动态变化的。 ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。
常用API
1、public E get(int index):获取某个索引位置处的元素值
System.out.println(list.get(3));//返回值默认为String类型,与Array创建的类型一致
2、public int size():获取集合的大小(元素个数)
System.out.println(list.size());
3、完成集合的遍历
for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); }
4、public E remove(int index):删除某个索引位置处的元素值,并返回被删除的元素值
System.out.println(list); String s1 = list.remove(1); System.out.println(s1); System.out.println(list);
5、public boolean remove(Object o):直接删除元素值,删除成功返回true,删除失败返回false
· 若有多个相同的元素,只会默认删除前面的一个元素
System.out.println(list.remove("MyBatis")); System.out.println(list);
6、public E set(int index,E element):修改某个索引位置处的元素值 System.out.println(list.set(0, "阿娇"));//返回修改前的元素值 System.out.println(list);