Java 哪一个更好?
每次循环在循环中执行三次以上时,我都会获取Java 哪一个更好?,java,performance,Java,Performance,每次循环在循环中执行三次以上时,我都会获取arraylist.get(I) 这是明智的,还是我应该将其存储在单独的变量中,然后反复使用它?哪一个在性能方面更可取 将其设置为变量稍微有效一些。accessing arrayList.get(I)是O(1),但即使它真的很小和不重要,也要付出一些代价。 在我看来,将其设置为变量更具可读性。像String myString=arraylist.get(i)一样声明并分配变量一次将比多次调用arraylist.get(i)稍微快一些 完成此操作后,可以调
arraylist.get(I)
这是明智的,还是我应该将其存储在单独的变量中,然后反复使用它?哪一个在性能方面更可取 将其设置为变量稍微有效一些。accessing arrayList.get(I)是O(1),但即使它真的很小和不重要,也要付出一些代价。
在我看来,将其设置为变量更具可读性。像
String myString=arraylist.get(i)一样声明并分配变量一次
将比多次调用arraylist.get(i)
稍微快一些
完成此操作后,可以调用myString
实例上的任何方法
我假设arraylist
属于arraylist
类型
您可能还希望在循环中包含空检查:
for(int i = 0; i < arraylist.size(); i++){
String myString = arraylist.get(i);
if(myString != null){
//any calls to methods on myString
}
}
for(int i=0;i
编写可读且可维护的代码始终是一种很好的方法。因为你的问题非常广泛,所以也希望得到广泛的答案
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);
}
List integerList=new ArrayList();
对于(int i=0;i,正如其他人提到的,一次获取对象的效率稍高一些。当然,大多数情况下,这不会产生任何问题,您也不会注意到任何差异。
逻辑上,因为它是一个O(1)
操作,它应该不会引起任何差异,但因为它调用了类型为ArrayList
的对象的函数,所以它不太方便缓存,可能需要直接内存引用。但是差异非常小。i是一个条件变量,只是一个数字。获取它一次,然后在整个过程中使用它。我会说y您没有损失太多,而且性能提升可以忽略不计。查看源代码,它所做的只是范围检查以查看i
是否在大小的范围内,并从数组返回元素。只需注意:int integerValue=integerList.get(i);
易受NullPointerException
的攻击@Tom非常感谢,已更新。@Tom它怎么可能易受NPE的攻击?循环的条件不会被满足,导致它无法进入吗?@SaviourSelf因为Integer
是一个包装类,所以,Integer Integer=null;
是可能的。@java8ted将int integerValue
更改为Integer integerValue
,但该注释也可以:D。