今天简单说下ArrayList,底层实现为数组
transient Object[] elementData;
增加删除方法都是通过数组copy方法,之后再增加size大小
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
以下为ArrayList的所有方法总结了下
ensureCapacity(int minCapacity)方法,扩展ArrayList内部数组的空间大小
size()方法,获取ArrayList的实际列表大小,而不是内部数组空间大小
isEmpty()方法,判断ArrayList的实际大小是否为空
contains(Object o)方法,判断ArrayList中是否存在该Object,内部实际调用indexOf方法
indexOf(Object o)方法,获取Object在ArrayList中的指针位置(第一个相同的Object),循环遍历所有数组挨个查找。
lastIndexOf(Object o)方法,获取Object在ArrayList中的最后一个指针位置(最后一个相同的Object),循环遍历所有数组挨个查找。
clone()方法,将原有ArrayList克隆一份给新建立的ArrayList,但是列表内部的数组中的信息不变
toArray()方法,将原有ArrayList转换为数组
toArray(T[] a)方法,将原有ArrayList转换为指定类型的数组
get(int index)方法,获取ArrayList中指定指针的内容
set(int index, E element)方法,设定ArrayList中指定指针位置的内容
add(E e)方法,在ArrayList尾部增加内容
add(int index, E element)方法,在ArrayList制定指针为增加内容,下一个指针内容向后顺移,为数组新增一个空间,通过System.arraycopy逐个复制指针后面每一个到下一个位置
remove(int index)方法,删除在ArrayList指定指针的内容,通过System.arraycopy逐个复制指针后面每一个到上一个位置,将最后一个位置设置为null
remove(Object o)方法,删除在ArrayList中的第一个相同的Object
clear()方法,清除ArrayList的内容
addAll(Collection<? extends E> c)方法,将新的列表全部增加到原有ArrayList的尾部
addAll(int index, Collection<? extends E> c)方法,将新的列表全部增加到原有ArrayList的指定指针位置,剩下的向后顺移
removeAll(Collection<?> c)方法,将所有的传入列表的内容从原有ArrayList中删除
retainAll(Collection<?> c)方法,将所有的传入列表的内容从原有ArrayList中保留,其余删除
listIterator(int index)方法,在指定指针位置开始创建ListIterator
listIterator()方法,在头开始创建ListIterator
iterator()方法,在开头穿件Iterator
subList(int fromIndex, int toIndex)方法,从开始指针到结束指针创建一个新的SubList,实际不是ArrayList,而是将SubList的开始指针指向ArrayList的fromIndex位置,SubList的结束指针指向ArrayList的toIndex位置。
foreach方法,JDK1.8新增的循环获取ArrayList的值
arrayList.forEach(x -> System.out.println(x));
removeIf方法,JDK1.8新增通过lamada表达式删除符合规则的项
arrayList.removeIf(x -> x.equals("1")|| x.equals("2"));
replaceAll方法,通过lamada表达式替换符合规则的项
arrayList.replaceAll(x->x.equals("3")?"三":x);
ArrayListSpliterator
将原有的ArrayList按照指针指向的起始index和结束index来拆分成新的ArrayList(实际类型为ArrayListSpliterator),但不可修改。
网友评论