1. Java的List集合简介:
1) List是一个抽象接口,其代表了一种有序(插入顺序)、可重复的集合,简单地来看完全可以当成一个可变长的数组;
2) 它有不同的实现类:ArrayList/Vector(从名称上看就是用数组实现的)、LinkedList(很明显使用链表实现的);
3) List的元素是可索引的,按照插入顺序,首元素索引是0(即从0开始计);
4) 当然,List是Collection的派生,List当然可以使用Collection的全部方法(add、remove等);
5) List虽然不要求元素不可重复,但是List还是需要判断元素是否相等的(比如查找、删除的时候肯定要先匹配到元素才行):List判断元素相等的依据就是元素的equals方法
2. List独有的根据索引来操作集合的方法:都是List的对象方法
1) 根据索引添加元素:
i. void add(int index, E element); // 添加到index处
ii. boolean addAll(int index, Collection<? extends E> c); // 将c中的全部元素插入到index处
!!以上两个方法都是插入(不会覆盖index后的元素,而是从中间插入);
2) 根据索引删除元素:E remove(int index); // 返回被删除的元素
3) 获取指定索引处的元素:E get(int index); // 不改变List
4) 修改(更新)指定所引出的元素:E set(int index, E element); // 返回修改前的元素
5) 定位元素:
i. int indexOf(Object o); // 返回o第一次出现的索引
ii. int lastIndexOf(Object o); // 返回o最后一次出现的索引
7) 根据索引区间截取子集:List<E> subList(int fromIndex, int toIndex); // [fromIndex, toIndex)左闭右开
!!获取元素个数:int size();
3. List常用的两个默认方法:
1) 自定定义算法重新设置List中的所有元素:default void replaceAll(UnaryOperator<E> operator); // 根据UnaryOperator的一元算法修改每一个元素
!!迭代参数就是元素本身,例如:li.replaceAll(ele -> ele + 2); // 每个元素变成自己+2
2) 自定义比较方法对List排序:default void sort(Comparator<? super E> c);
4. ListIterator:
1) List有自己专用的迭代器,即ListIterator,通过该方法获取:ListIterator<E> listIterator();
!!ListIterator派生自Iterator,因此Iterator的方法都能使用,但是ListIterator新增了很多适用于List的迭代功能,主要特点是支持向前迭代;
2) ListIterator的特色方法(也是常用方法):
!!向前迭代:
i. boolean hasPrevious();
ii. E previous();
!在当前位置插入一个元素:void add(E e); // 即直接用迭代器往List中插入元素,而Iterator只能删除不能插入,ListIterator更进一步