闲来无事,看到了Collections类的这个方法,于是研究了一下源码。惊叹!贴出来以后随时欣赏
此方法的功能是将List列表的内容向右移动distance个距离,末尾的元素循环到前面
其中rotate2的实现正是《编程珠玑》第二章所提到的一个算法。
其中的reverse方法也是Collections类里的一个方法,其源码如下:
public static void reverse(List<?> list) {
int size = list.size();
if (size < REVERSE_THRESHOLD || list instanceof RandomAccess) {
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);
}
}
}
注意其中的for循环初始值,mid=size>>1。
写源码的人太有才了!
本文探讨了Collections类中rotate()方法的源码,该方法用于将List向右旋转指定距离。通过两种不同实现,包括一种适用于RandomAccess接口的列表,另一种通用实现,展示了高效的列表旋转算法。此外,还提到了rotate2()方法与《编程珠玑》中的算法关联,以及reverse()方法的源码细节。

989

被折叠的 条评论
为什么被折叠?



