哪个更好?

时间:2016-05-09 15:44:42

标签: java performance

每次循环在循环中执行三次以上时,我得arraylist.get(i)

是可取的还是我应该将它存储在单独的变量中,然后一次又一次地使用它?哪一个更适合表现?

4 个答案:

答案 0 :(得分:4)

将其设置为变量稍微有效。访问arrayList.get(I)是O(1),但仍然需要花费一些东西,尽管它实际上是次要的和微不足道的。 在我看来,将它设置为变量更具可读性。

答案 1 :(得分: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,您只需更改一次,而不是多次。

答案 2 :(得分:3)

正如其他人所提到的,一次获取对象效率稍高。当然,大多数时候这不会产生任何问题,你也不会注意到任何差异 逻辑上因为它是一个O(1)操作,它不应该导致任何差异,但是因为它调用类型为ArrayList的对象的函数,所以它的缓存友好性较低,可能需要直接的内存引用。差别很小。

答案 3 :(得分:2)

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 
    }
}