Collections工具類里的
Collections.synchronizedList
public static <T> List<T> synchronizedList(List<T> list) {
return (list instanceof RandomAccess ?
new SynchronizedRandomAccessList<T>(list) :
new SynchronizedList<T>(list));
}
##僅僅是通過判斷是否實現RandomAccess接口,而返回不同的SynchronizedList(內部)類,
##RandomAccess foreach較快, iterator較慢,差別不明顯(如i5上,本人測試,一個ArrayList,90w個object, foreach出來是6多ms, iterator出來7ms)
##SequenceAccess foreach較慢,iterator較快.差別非常明顯. (如i5上,本人測試,一個LinkedList,10w個object, foreach出來是200多ms, iterator出來僅4ms)
LinkedList的get(n) 方法. 源碼里寫得也有點妙,一不留意 確實是個坑. (這是SequenceAccess 的foreach 慢的原因)
private Entry<E> entry(int index) {
if (index < 0 || index >= size)
throw new IndexOutOfBoundsException("Index: "+index+
", Size: "+size);
Entry<E> e = header;
if (index < (size >> 1)) {
for (int i = 0; i <= index; i++)
e = e.next;
} else {
for (int i = size; i > index; i--)
e = e.previous;
}
return e;
}