簡體   English   中英

使用 list.size() 或變量進行多次使用? (局部優化)

[英]Use list.size() or a variable for multiple use ? (local optimization)

我有一個簡單的 function 調用了很多。

在這個 function 中,我對列表的大小(包含大約 10 個元素)有很多調用:

list.size()

我使用臨時變量只獲取一次大小會更快,還是每次調用size()方法更快?

更新:它是ArrayList

注意:我知道我在做什么,我不是在尋找關於優化以及應該如何做或不應該做的講座。 我只是在尋找答案。

這完全取決於實施。 您沒有指定list的類型 - 我假設它是List<E>或一些具體的實現。

在諸如ArrayList<E>之類的一些實現中,它非常便宜——基本上是字段訪問。 誠然,它僅記錄在恆定時間方面:

sizeisEmptygetsetiteratorlistIterator操作在恆定時間內運行。

在其他情況下,它可能會很昂貴。 該接口不提供任何保證。 我希望它在大多數實現中都很便宜(恆定時間),但你永遠無法確定......

這取決於查看ArrayList源的List的實現

/**
  225        * Returns the number of elements in this list.
  226        *
  227        * @return the number of elements in this list
  228        */
  229       public int size() {
  230           return size;
  231       }
  232   

所以不管是取局部變量還是調用這個方法

看看這個(來自ArrayListLinkedList ):

/**
 * Returns the number of elements in this list.
 *
 * @return the number of elements in this list
 */
public int size() {
return size;
}

調用list.size()與調用方法並將值放入堆棧一樣有效:(幾乎)可以忽略不計。 當然,使用本地( final )變量會快一點。 如果這在您的應用程序上下文中是否是一項重要的改進,您可能必須進行衡量。

不管size()方法調用有多快。 如果該方法在代碼塊中被多次調用,假設該方法沒有改變任何東西,那么引入一個變量來攜帶該方法的結果是一個很好的做法。

暫無
暫無

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

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