每次循环在循环中执行三次以上时,我得arraylist.get(i)
。
是可取的还是我应该将它存储在单独的变量中,然后一次又一次地使用它?哪一个更适合表现?
答案 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
}
}