每次迭代多次使用ArrayList.get()会对性能产生影响吗?

Day*_*yan 6 java performance android

对于一般的Android开发,执行以下操作会更昂贵:(示例1)

for(int x=0; x < largeObjectCollection.size(); x++){
    largeObjectCollection.get(x).SomeValueOne   = "Sample Value 1";
    largeObjectCollection.get(x).SomeValueTwo   = "Sample Value 2";
    largeObjectCollection.get(x).SomeValueThree = "Sample Value 3" ;
    //Continues on to over 30 properties...
}
Run Code Online (Sandbox Code Playgroud)

在此实现(示例2)

for(int x=0; x < largeObjectCollection.size(); x++){
   SampleObjectIns myObject = largeObjectCollection.get(x);
   myObject.SomeValueOne   = "Sample Value 1";
   myObject.SomeValueTwo   = "Sample Value 2";
   myObject.SomeValueThree = "Sample Value 3" ;
   //Continues on to over 30 properties...
}
Run Code Online (Sandbox Code Playgroud)

当使用.get()多次而不是每次迭代创建该对象的新实例时,我找不到任何性能影响的细分.

我认为.get()在资源方面没有太大用处,因为元素的位置已经知道,但是当处理许多属性时,最好只获取该对象一次,如例2所示?

And*_*ner 1

第一个案例显然需要做更多的工作。至少有两种可能性:

  • JIT 可能能够确定列表值没有更改,并且您重复请求相同的值;因此它有效地将其转换为第二种形式。
  • 操作ArrayList.get速度非常快;它基本上只是进行数组查找,并且它查找的值已经在缓存中,因为您刚刚查找过它。

    因此,您的时间测量主要由您正在做的其他工作决定。因此,即使您拨打的get电话数量比必要的多 29 次,30 倍的小数字仍然是小数字。