size()
方法ArrayList
類只是一個getter,還是它執行任何類型的計算?ArrayList中size()方法的用途
如果它是一個吸氣劑,那麼可以安全地假設,如果我稱它爲大量次,它會在某個點上內聯。
size()
方法ArrayList
類只是一個getter,還是它執行任何類型的計算?ArrayList中size()方法的用途
如果它是一個吸氣劑,那麼可以安全地假設,如果我稱它爲大量次,它會在某個點上內聯。
如果您在調用「size()」時是否有任何開銷,答案是「否」。
這裏有一個類似的方法,string.length減()類似的討論:
In Java, for a string x, what is the runtime cost of s.length()? Is it O(1) or O(n)?
在兩種情況下的答案 - string.length減()和ArrayList.size() - 是「O( 1)」。
size()
方法不是一個標準制定者/吸氣劑,它是被定義以得到list
的大小List
的方法(多個元件)
ArrayList
通過以下方式
public int size() {
230 return size;
231 }
實現它
它維護一個int
變量,調用size
,當我們添加它時,增加,減少刪除。
ArrayList.size()
是否會內聯取決於許多因素,但是,至少在理論上,如果您引用的次數足夠多並且所有其他內聯標準都滿足,那麼它將被內聯。
大多數情況下,ArrayList只是一個類,與您可能編寫的類不同。所以它將受制於相同的內聯規則/潛力。
[只是檢查的ArrayList源,這裏是我的發現:
public int size() {
return size;
}
大約是香草(和高度直列能),你可以得到。所以我想說,size()
幾乎會內聯在幾乎所有的情況下,你不會嚴重模糊類的類型。]
由於getter只是返回一個字段,沒有負面的性能影響。 JIT足夠聰明,可以將呼叫內聯,從而避免函數調用開銷。
查看類似的問題在這裏:Is ArrayList.size() method cached?
如果你想真正看到自己如何大小()方法來實現,你可以下載源代碼的Java庫,因爲它是在GNU GPL;第196行的OpenJDK 6源代碼。
在內聯的話題,您不妨仔細閱讀以下職位: