public static void reverse(List<?> list) {
int size = list.size();
//REVERSE_THRESHOLD =18 数据倒叙大小限制
if (size < REVERSE_THRESHOLD || list instanceof RandomAccess) {
//折半处理,前后交换
//size>>1 相等于 size/2
for (int i=0, mid=size>>1, j=size-1; i<mid; i++, j--){
swap(list, i, j);
}
} else {
ListIterator fwd = list.listIterator();
ListIterator rev = list.listIterator(size);
for (int i=0, mid=list.size()>>1; i<mid; i++) {
Object tmp = fwd.next();
fwd.set(rev.previous());
rev.set(tmp);
}
}
}
(1)next():返回集合中Iterator指向位置后面的元素
(2)previous():返回列表中ListIterator指向位置前面的元素
public static void swap(List<?> list, int i, int j) {
final List l = list;
//l.set(j, l.get(i)) 获取原来的数据
l.set(i, l.set(j, l.get(i)));
}
public ListIterator<E> listIterator(int index) {
if (index < 0 || index > size)
throw new IndexOutOfBoundsException("Index: "+index);
return new ListItr(index);
}
public E set(int index, E element) {
rangeCheck(index);
E oldValue = elementData(index);
elementData[index] = element;
return oldValue;
}