Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 哪一个更好?_Java_Performance - Fatal编程技术网

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。