2016-05-09 104 views
2

每次循環內循環執行次數超過三次時,我都會得到arraylist.get(i)哪一個更好?

這是可取的或我應該存儲在單獨的變量,然後再次使用它?哪一個更適合表現明智?

+2

我是一個條件變量,只是一個數字。 –

+0

'獲取'一次,然後在整個過程中使用它。 – robotlos

+0

我想說你不會損失太多,性能提升可以忽略不計。查看源代碼[ArrayList](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#ArrayList.elementData%28int% 29),它所做的只是範圍檢查,以查看「i」是否在大小的範圍內,並從數組中返回元素。 –

回答

4

將其設置爲變量稍微有效一些。訪問arrayList.get(I)是O(1),但仍然會花費一些東西,儘管它確實很小並且不重要。 在我看來,將它設置爲一個變量更具可讀性。

2

聲明和分配一個像String myString = arraylist.get(i);一樣的變量將稍微快於多次調用arraylist.get(i)

完成此操作後,您可以調用myString實例上的任何方法。我認爲arraylistArrayList<String>型。

你可能要包括在循環空校驗和:

for(int i = 0; i < arraylist.size(); i++){ 
    String myString = arraylist.get(i); 
    if(myString != null){ 
     //any calls to methods on myString 
    } 
} 
4

它總是寫可讀和可維護的代碼一個不錯的辦法。既然你的問題非常廣泛,所以期待廣泛的答案。

 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,您只需更換一次而不是多次即可輕​​鬆完成。

+1

只需注意:'int integerValue = integerList.get(i);'易受'NullPointerException'影響。 – Tom

+0

@Tom非常感謝,更新。 –

+0

@Tom它如何容易受到NPE的影響?環路的條件不會得到滿足,導致它不進入? –

3

正如其他人所說,獲取對象一次是稍微有效。當然,大多數時候這不會產生任何問題,您也不會注意到任何差異。
從邏輯上講,因爲它是一個O(1)操作,所以它應該不會造成任何差異,但是因爲它調用ArrayList類型的對象的函數,所以它對緩存友好性較低,並且可能需要直接內存引用。差別仍然很小。