簡體   English   中英

最快從LinkedList獲取條目/節點

[英]Get entry/node from LinkedList fastest

LinkedList.java中,我找到了一種獲取條目的方法。

/**
 * 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))

可以保證我們要求的索引在列表的前半部分。

在代碼示例中,沒有理由右移一位:除以2將具有相同的性能,並且可能比移位具有更好的可讀性。 在C的早期,這種微優化非常普遍,但是現在,每一個值得精打細算的優化器都可以替您完成此優化。

其實不行 如果在硬件級別上非常快地進行移位操作。 就像連接電線(鑽頭)並分散移位的錘子一樣。 請注意,這僅適用於整數運算和“適用於基數2除法”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM