哪一個更好?
回答
將其設置爲變量稍微有效一些。訪問arrayList.get(I)是O(1),但仍然會花費一些東西,儘管它確實很小並且不重要。 在我看來,將它設置爲一個變量更具可讀性。
聲明和分配一個像String myString = arraylist.get(i);
一樣的變量將稍微快於多次調用arraylist.get(i)
。
完成此操作後,您可以調用myString
實例上的任何方法。我認爲arraylist
是ArrayList<String>
型。
你可能要包括在循環空校驗和:
for(int i = 0; i < arraylist.size(); i++){
String myString = arraylist.get(i);
if(myString != null){
//any calls to methods on myString
}
}
它總是寫可讀和可維護的代碼一個不錯的辦法。既然你的問題非常廣泛,所以期待廣泛的答案。
List<Integer> integerList = new ArrayList<>();
for (int i=0;i<integerList.size();i++) {
Integer integerValue = integerList.get(i);
// make sure integerValue is not null.
// Thanks @Tom for pointing this out
System.out.println (integerValue);
// Do operations
System.out.println (integerValue);
// Do more operations
System.out.println (integerValue);
}
現在這是一次性作業,但您可以多次使用它。現在,例如,您必須更改程序的邏輯,以便始終獲得i+1
,您只需更換一次而不是多次即可輕鬆完成。
只需注意:'int integerValue = integerList.get(i);'易受'NullPointerException'影響。 – Tom
@Tom非常感謝,更新。 –
@Tom它如何容易受到NPE的影響?環路的條件不會得到滿足,導致它不進入? –
正如其他人所說,獲取對象一次是稍微有效。當然,大多數時候這不會產生任何問題,您也不會注意到任何差異。
從邏輯上講,因爲它是一個O(1)
操作,所以它應該不會造成任何差異,但是因爲它調用ArrayList
類型的對象的函數,所以它對緩存友好性較低,並且可能需要直接內存引用。差別仍然很小。
- 1. 哪一個更好?
- 2. 哪一個更好?
- 3. J2me Httpconnection,哪一個更好?
- 4. SQL中哪一個更好?
- 5. 哪個更好
- 6. 哪個更好?
- 7. 哪個更好?
- 8. 哪個listview更好?
- 9. 哪個JSON更好
- 10. 選擇一對多哪一個更好
- 11. 哪一個是更好的查詢
- 12. Enum vs cache?哪一個更好
- 13. 哪一個更好地運行laravel?
- 14. Model.find_by_sql vs connection.query,哪一個更好?
- 15. 「if」和「#if」;哪一個更好用
- 16. 哪一個更好? 「var」或「DataType」?
- 17. Xamarin,Objective C或Phonegap哪一個更好?
- 18. Spring + CXF或Spring + Mule?哪一個更好?
- 19. CMYK vs sRGB - 哪一個更好
- 20. 哪一個更好pushstate或location.hash?
- 21. DTD或XML Schema。哪一個更好?
- 22. 哪一個更好從DATE_FORMATE()或MONTH(),YEAR()
- 23. 哪一個更好JSkype或Skype4Java
- 24. TextView或WebView中哪一個更好?
- 25. 實例和迭代。哪一個更好?
- 26. Atom或RSS,哪一個更好
- 27. 哪一個更好的FCM或GCM?
- 28. 哪一個更好? URLReWriter.net或URLReWriting.NET
- 29. XMPP或HTTP。哪一個更好?
- 30. typecasting vs memcpy():哪一個更好?
我是一個條件變量,只是一個數字。 –
'獲取'一次,然後在整個過程中使用它。 – robotlos
我想說你不會損失太多,性能提升可以忽略不計。查看源代碼[ArrayList](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#ArrayList.elementData%28int% 29),它所做的只是範圍檢查,以查看「i」是否在大小的範圍內,並從數組中返回元素。 –