List和ListIterator是什么?
List是Collection子接口,为所有线性结构的数据提供了统一接口
ListIterator是专门为迭代List新增的迭代器,可实现向前迭代
List源码
为节省篇幅不再列出对Collectoion的复写方法,根据空格将源码分类:获取(指定位置的)ListIterator迭代器方法、截取方法、根据索引增-删-查-改、获取元素第一次/最后一次出现的位置、全替换、排序
public interface List<E> extends Collection<E> {
ListIterator<E> listIterator();
ListIterator<E> listIterator(int index);
List<E> subList(int fromIndex, int toIndex);
void add(int index, E element);
boolean addAll(int index, Collection<? extends E> c);
E remove(int index);
E get(int index);
E set(int index, E element);
int indexOf(Object o);
int lastIndexOf(Object o);
default void replaceAll(UnaryOperator<E> operator) {
Objects.requireNonNull(operator);
final ListIterator<E> li = this.listIterator();
while (li.hasNext()) {
li.set(operator.apply(li.next()));
}
}
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
}
Tips:
- sort()方法需传入Comparator(子类可与父类排序),先转为数组排序,排完后依次放回List
- replaceAll()方法采用的是函数式编程,暂不懂
ListIterator
ListIterator是Iterator的子类,专门用来对数组结构迭代,为节省篇幅不再列出对Iterator的复写方法
public interface ListIterator<E> extends Iterator<E> {
void remove();
void add(E e);
void set(E e);
boolean hasPrevious();
E previous();
int nextIndex();
int previousIndex();
Tips:
- add():在迭代器当前位置插入,不返回boolean,假定操作总会改变
- hasPrevious():判断是否存在上一个元素
- previous():获取上一个越过的元素
- nextIndex()和previousIndex():获取下一个/上一个元素的位置
- set():替换上一次越过的元素,调用前需调用next()或previous()