@SuppressWarnings({"unchecked", "rawtypes"})
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();//#1
Arrays.sort(a, (Comparator) c);//#2
ListIterator<E> i = this.listIterator();//#3
for (Object e : a) {//#4
i.next();//#5
i.set((E) e);//#6
}
}
上述是一个排序函数,传入的参数是一个Comparator对象,后续会写这个的源码。#1是将list链表转化为一个Object类型的数组。#2是调用数组Arrays(后续会写该源码)的排序函数,排序方法是根据Comparator指定的方法排序。参数a是要排序的数组,c指定了排序的方法(是降序还是升序等);#3创建一个链表迭代器的引用,并将当前List链表的迭代器赋值给该引用。#4使用for循环遍历Object数组,将Object数组中的值存入到链表迭代器中。
void clear();
该方法移除链表中所有的元素。
boolean equals(Object o);
比较链表中两个元素是否相同,具体的比较要看具体的实现
int hashCode();
计算链表的hashCode值
E get(int index);
获取链表中指定位置的元素。如果index<0||index>=size则会报数组越界异常。
E set(int index, E element);
用指定的值取代链表中指定位置的值。如果index<0||index>=size会报数组越界异常。
void add(int index, E element);
在链表的指定位置插入指定的元素,并将当前位置和之后的元素(如果有的话)向右移动。如果index<0||index>size则会报index越界异常。所以在size处是可以插入元素的。
E remove(int index);
移除链表中指定位置的元素。如果index<0||index>=size则报IndexOutOfBoundsException异常。
int indexOf(Object o);
返回链表中第一个与指定元素匹配的索引,如果链表中不包含指定元素,则返回-1.
int lastIndexOf(Object o);
返回链表中最后一次出现指定元素的索引,如果链表中不包含该元素,则返回-1。
ListIterator<E> listIterator();
该方法返回一个链表迭代器
ListIterator<E> listIterator(int index);
返回一个从指定位置开始的链表迭代器。
List<E> subList(int fromIndex, int toIndex);
截取链表中从fromIndex开始到toIndex之间的链表,如果fromIndex=toIndex,则返回的是一个空链表
@Override
default Spliterator<E> spliterator() {
return Spliterators.spliterator(this, Spliterator.ORDERED);
}
Spliterator接口是1.8新加的接口,字面意思可分割的迭代器,不同以往的iterator需要顺序迭代,Spliterator可以分割为若干个小的迭代器进行并行操作,既可以实现多线程操作提高效率,又可以避免普通迭代器的fail-fast机制所带来的异常。Spliterator可以配合1.8新加的Stream进行并行流的实现,大大提高处理效率。Spliterator.ORDERED表示元素是有序的(这个有序表示每个元素的前后关系不变,每次遍历的结果相同)
- 注
1.8以前,在接口中是不能对方法进行实现的,方法默认是抽象类型。而1.8后,可以通过使用default关键字对方法修饰,这样就可以在接口中对方法进行实现。而且接口的实现类中也不强制对default修饰的方法进行重写。