我想知道.size()
方法的性能。此方法是否從列表中的對象數量返回引用(如每次將對象添加到列表時都增加的類成員)?還是它遍歷所有對象?Java List size()性能和提示
哪一個更有效?
調用.size()
每次:
List<Vector3> objects = getCoords();
for (int x = 0; x < objects.size(); x++){
for (int y = 0; y < objects.size(); y++){
for (int z = 0; z < objects.size(); z++){
drawShape(x, y, z);
}
}
}
或者通過保存到一個局部變量:
List<Vector3> objects = getCoords();
int size = objects.size();
for (int x = 0; x < size; x++){
for (int y = 0; y < size; y++){
for (int z = 0; z < size; z++){
drawShape(x, y, z);
}
}
}
讓我們假設,我們已經在列表中> 30.000對象。
哪一個更快/更高效?
如果我們使用ArrayList<T>
或List<T>
是否重要?
什麼簡單的語句:.size()
或.isEmpty()
if (objects != null && objects.size() > 0){
doThis();
}
或致電.isEmpty()
if (objects != null && !objects.isEmpty()){
doSomethingElse();
}
班級成員,如果有內存服務。你可以通過各種實現的源代碼來找出問題,但我真的懷疑迭代方法會被採用。性能損失太大,以致無法保證4字節內存的節省。如果尺寸不變,你的兩個循環*可以是等價的,並且我認爲在這種情況下JITC可以將一個變成另一個。無論您使用'ArrayList'還是'List '都是一個靈活性問題。最後,你選擇實際的實現。 'size()'和'isEmpty()'解決了不同的問題。 –
awksp
'getCoords()'返回什麼類型的'List'?它可能並不重要,但值得注意的是'List'只是一個接口,所以它的實現可能會有不同的表現。 –
無需「挖掘」。查看源代碼。至於ArrayList vs List:一個是接口。保留作業左側的接口有其優點(更多關於SO的某處) – keyser