ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
ArrayList 继承了 AbstractList ,并实现了 List 接口,允许 null 的存在。
import java.util.ArrayList;
import java.util.List;
//E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型。
//objectName: 对象名
List<E> objectName =new ArrayList<>();
排序
public static void main(String[] args) {
ArrayList<Integer> myNumbers = new ArrayList<Integer>();
myNumbers.add(2);
myNumbers.add(3);
myNumbers.add(1);
Collections.sort(myNumbers); // 数字排序
for (int i : myNumbers) {
System.out.println(i);
}
}
特性
- 允许插入的元素重复
- 插入的元素是有序的
- 动态扩容
- 非线程安全,异步
- 基于动态数组的数据结构
- 擅长随机访问(get set)
注意:
- 如果我们要存储其他类型,而 <E> 只能为引用数据类型,这时我们就需要使用到基本类型的包装类。
- ArrayList 底层是基于数组来实现容量大小动态变化的。
- ArrayList 默认初始容量为10,无参构造函数 构造一个容量大小为 10 的空的 list 集合,但构造函数只是给 ArrayList 赋值了一个空的数组,其实是在第一次添加元素时容量扩大至 10 的。
- ArrayList 的索引值从 0 开始。
Serializable接口:
ArrayList实现了java.io.Serializable接口,该接口主要是在序列化的时候起作用。
RandomAccess 接口:
RandomAccess 是
List
实现所使用的标记接口,用来表明其支持快速(通常是固定时间)随机访问。此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能。
Cloneable接口:
它允许在堆中克隆出一块和原对象一样的对象,并将这个对象的地址赋予新的引用,这样显然我对新引用的操作,不会影响到原对象。
此类实现了Cloneable接口,以指示Object的clone()方法可以合法地对该类实例进行按字段复制。Object的clone()方法,提供的是一种浅克隆的机制,如果想要实现对对象的深克隆,可以引入第三方jar包等方式。
浅克隆和深克隆
浅克隆(shallow clone)和深克隆(deep clone)反映的是:当对象中还有对象的时候,那么:
- 浅克隆,即很表层的克隆,如果我们要克隆对象,只克隆它自身以及它所包含的所有对象的引用地址。
- 深克隆,克隆除自身对象以外的所有对象,包括自身所包含的所有对象实例。
Modifier and Type | Method and Description |
---|---|
boolean | add(E e) 将指定的元素追加到此列表的末尾。 |
void | add(int index, E element) 在此列表中的指定位置插入指定的元素。 |
boolean | addAll(Collection<? extends E> c) 按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾。 |
boolean | addAll(int index, Collection<? extends E> c) 将指定集合中的所有元素插入到此列表中,从指定的位置开始。 |
void | clear() 从列表中删除所有元素。 |
Object | clone() 返回此 ArrayList实例的浅拷贝。 |
boolean | contains(Object o) 如果此列表包含指定的元素,则返回 true 。 |
void | ensureCapacity(int minCapacity) 如果需要,增加此 ArrayList实例的容量,以确保它可以至少保存最小容量参数指定的元素数。 |
void | forEach(Consumer<? super E> action) 对 |
E | get(int index) 返回此列表中指定位置的元素。 |
int | indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。 |
boolean | isEmpty() 如果此列表不包含元素,则返回 true 。 |
Iterator<E> | iterator() 以正确的顺序返回该列表中的元素的迭代器。 |
int | lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。 |
ListIterator<E> | listIterator() 返回列表中的列表迭代器(按适当的顺序)。 |
ListIterator<E> | listIterator(int index) 从列表中的指定位置开始,返回列表中的元素(按正确顺序)的列表迭代器。 |
E | remove(int index) 删除该列表中指定位置的元素。 |
boolean | remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。 |
boolean | removeAll(Collection<?> c) 从此列表中删除指定集合中包含的所有元素。 |
boolean | removeIf(Predicate<? super E> filter) 删除满足给定谓词的此集合的所有元素。 |
protected void | removeRange(int fromIndex, int toIndex) 从这个列表中删除所有索引在 |
void | replaceAll(UnaryOperator<E> operator) 将该列表的每个元素替换为将该运算符应用于该元素的结果。 |
boolean | retainAll(Collection<?> c) 仅保留此列表中包含在指定集合中的元素。 |
E | set(int index, E element) 用指定的元素替换此列表中指定位置的元素。 |
int | size() 返回此列表中的元素数。 |
void | sort(Comparator<? super E> c) 使用提供的 |
Spliterator<E> | spliterator() 在此列表中的元素上创建late-binding和故障快速 |
List<E> | subList(int fromIndex, int toIndex) 返回此列表中指定的 |
Object[] | toArray() 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。 |
<T> T[] | toArray(T[] a) 以正确的顺序返回一个包含此列表中所有元素的数组(从第一个到最后一个元素); 返回的数组的运行时类型是指定数组的运行时类型。 |
void | trimToSize() 修改这个 ArrayList实例的容量是列表的当前大小。 |