從LinkedList.java我發現這個方法獲取條目。從LinkedList獲取條目/節點最快
/**
* Returns the indexed entry.
*/
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;
}
我是什麼錯誤:
if (index < (size >> 1))
爲什麼在這裏做一個移位操作?不會是這樣的最佳?
if (index < (size/2)) {
for (int i = 0; i <= index; i++)
e = e.next;
} else {
for (int i = size; i > index; i--)
e = e.previous;
}
由於
if (index < (size/2))
會答應我們的請求的索引在列表中的前半部分。
尺寸>> 1和尺寸/ 2相同 – Eran 2015-02-08 14:37:04
它們是等效的。但是將大小>> 1轉換爲機器碼,會產生比整數除法更快的位移。 – JuniorCompressor 2015-02-08 14:37:21