说在前面
ArrayList是基于数组实现的,相对链表查找快、修改慢。
public class ArrayList< E >
extends AbstractList< E >
implements List< E >, RandomAccess, Cloneable, Serializable
属性
1. private static final long serialVersionUID = 8683452581122892189L; :记录类的版本,确保类可以正确的序列化。
2. private static final int DEFAULT_CAPACITY = 10; :默认的初始化容量。
3. private static final Object[] EMPTY_ELEMENTDATA = {};
4. private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; :据我看,这个属性和上面的属性提供了不同的扩容方案,为了提高性能。
5. transient Object[] elementData; :用来存储元素的数组。
6. private int size; :ArrayList中元素数量。
7. protected int modCount : 这个列表在结构上被修改的次数。继承自AbstractList。
构造函数
ArrayList() :默认的构造函数,此时用DEFAULTCAPACITY_EMPTY_ELEMENTDATA赋给elementData
ArrayList(Collection<? extends E> c) :将一个Collection初始化为一个ArrayList。长度为0时,用EMPTY_ELEMENTDATA 赋给elementData
ArrayList(int initialCapacity) :开辟给定大小的容量;当initialCapacity 等于0 时用EMPTY_ELEMENTDATA 赋给elementData
其他方法
1. boolean add(E e) :将元素e添加在所有元素的末尾,如果当前容量已满就会自动扩容1.5倍。添加成功返回true。
2. void add(int index, E element) :将element元素加在下标为index的位置,原index及以后位置的元素同一向后移一位。如果当前容量已满就会自动扩容当前容量的1.5倍。
3. boolean addAll(Collection<? extends E> c) :将c中的元素追加到ArrayList的尾部,c长度为0返回false。
4. boolean addAll(int index, Collection<? extends E> c) :将c中的元素加在index位置,原index及以后位置的元素同一向后移。
5. void clear() :删除ArrayList的所有元素。
6. Object clone() :该ArrayList实例的克隆
7. boolean contains(Object o) :判断ArrayList中是否有o元素。使用indexOf实现。
8. void ensureCapacity(int minCapacity) :修改当前容量为你指定的容量(minCapacity),但是你的指定必须大于实际容量。
9. void forEach(Consumer<? super E> action) :使每个元素执行action的aaccept方法。
10. E get(int index) :返回下标为index的元素,(即第index + 1个元素)
11. int indexOf(Object o) :返回找到的第一个o元素的下标,没找到返回-1
12. boolean isEmpty() :判断ArrayList是否为空。
13. Iterator<E> iterator() :返回一个迭代器
14. int lastIndexOf(Object o) :返回最后一个o元素的下标,没找到返回-1
15. ListIterator<E> listIterator() :返回一个从0下标开始的迭代器。
16. ListIterator<E> listIterator(int index) :返回一个从index下标开始的迭代器。
17. E remove(int index) :删除对应下标的元素,下标后的元素往前补,返回所删除的元素。
18. boolean remove(Object o) :删除指定的元素。删除成功返回true,没有找到返回flase。
19. boolean removeAll(Collection<?> c) :删除ArrayList和c中的相同元素。源码值得看。
20. boolean removeIf(Predicate<? super E> filter) :方法用于删除所有满足特定条件的数组元素。
21. protected void removeRange(int fromIndex, int toIndex) :删除从fromIndex到toIndex的元素,删除后后面元素往前补,补齐后多余内容赋为null。
22. void replaceAll(UnaryOperator<E> operator) :用于将给定的操作内容替换掉数组中每一个元素。
23. boolean retainAll(Collection<?> c) :保留c中的元素,删除除c中的共同元素以外的所有元素。
24. E set(int index, E element) :将下标为index的元素设置为element,并且返回旧的元素。
25. int size() :返回ArrayList的元素个数。
26. void sort(Comparator<? super E> c) :使用实现了Comparator接口的类c对ArrayList进行排序。
27. Spliterator<E> spliterator() :新版迭代器。详情自行百度
28. List<E> subList(int fromIndex, int toIndex) :返回一个SubList,继承了AbstractList,实现了RandomAccess
29. Object[] toArray() :一个按正确顺序包含列表中所有元素的数组。
30. <T> T[] toArray(T[] a) :将ArrayList转为T类型并赋给a数组。如果a的长度小,就会对ArrayList截断;如果ArrayList的size小,将ArrayList赋值给a后,在a的下标为size的位置赋上null。
31. void trimToSize() :将这个ArrayList实例的容量调整为列表的当前大小。
T[] toArray(T[] a) 函数
public static void main(String[] args) {
ArrayList<Integer> arr = new ArrayList<>(12);
arr.add((Integer) 12);arr.add((Integer) 13);
//Number[] IntArr = new Number[]{1,2,3,4}; yes! 只要是可互转类型就行
Integer[] IntArr = new Integer[]{1,2,3,4};
System.out.println(Arrays.toString(arr.toArray(IntArr)));
}
/*
运行结果:
[12, 13, null, 4]
*/