[英]Use list.size() or a variable for multiple use ? (local optimization)
我有一個簡單的 function 調用了很多。
在這個 function 中,我對列表的大小(包含大約 10 個元素)有很多調用:
list.size()
我使用臨時變量只獲取一次大小會更快,還是每次調用size()
方法更快?
更新:它是ArrayList
。
注意:我知道我在做什么,我不是在尋找關於優化以及應該如何做或不應該做的講座。 我只是在尋找答案。
這完全取決於實施。 您沒有指定list
的類型 - 我假設它是List<E>
或一些具體的實現。
在諸如ArrayList<E>
之類的一些實現中,它非常便宜——基本上是字段訪問。 誠然,它僅記錄在恆定時間方面:
size
、isEmpty
、get
、set
、iterator
和listIterator
操作在恆定時間內運行。
在其他情況下,它可能會很昂貴。 該接口不提供任何保證。 我希望它在大多數實現中都很便宜(恆定時間),但你永遠無法確定......
這取決於查看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
所以不管是取局部變量還是調用這個方法
看看這個(來自ArrayList
和LinkedList
):
/**
* 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.