List接口继承了Collection接口,是列表这一类型的基础接口
继承父类的方法
int size();
boolean isEmpty();
boolean contains(Object o);
Iterator<E> iterator();
Object[] toArray();
<T> T[] toArray(T[] a);
boolean add(E e);
boolean remove(Object o);
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c);
boolean removeAll(Collection<?> c);
boolean retainAll(Collection<?> c);
void clear();
default Spliterator<E> spliterator() {
return Spliterators.spliterator(this, Spliterator.ORDERED);
}
特有的方法
List翻译过来的意思就是个列表,对于列表会有一些特殊的操作。
1. 新增,修改,删除
//在指定位置上添加集合c的所有元素
boolean addAll(int index, Collection<? extends E> c);
//替换所有元素
default void replaceAll(UnaryOperator<E> operator) {
Objects.requireNonNull(operator);
final ListIterator<E> li = this.listIterator();
while (li.hasNext()) {
li.set(operator.apply(li.next()));
}
}
//在指定位置上添加元素
void add(int index, E element);
//替换指定位置上的元素
E set(int index, E element);
//删除指定位置上的元素
E remove(int index);
UnaryOperator跟之前提到的Consumer类似,也是个函数式编程的接口,不一样的地方在于UnaryOperator有返回值。
2.查找
//获取指定位置上的元素
E get(int index);
//返回元素的索引
int indexOf(Object o);
//返回元素最后出现位置的索引
int lastIndexOf(Object o);
3.排序
default void sort(Comparator<? super E> c) {
//转换为数组
Object[] a = this.toArray();
//安装c里面的定义的规则进行排序
Arrays.sort(a, (Comparator) c);
//通过ListIterator迭代依次替换每个元素
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
4. 返回子序列
List<E> subList(int fromIndex, int toIndex);
5.List迭代器
ListIterator<E> listIterator();
//从指定位置开始的iterator
ListIterator<E> listIterator(int index);
很明显ListIterator是List特有的迭代器,接下来就分析ListIterator吧。