java - 每次迭代多次使用 ArrayList.get() 时是否会对性能产生影响?

标签 java android performance

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

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

在这个实现上(示例 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...
}

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

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

最佳答案

在循环构造中多次调用 get() 方法不会对性能产生影响。

get() 方法不执行任何搜索类型的操作。该位置是已知的,因此 RAM 中的确切位置也是已知的。所以它需要做的就是进行一次 RAM 访问,这是一个恒定时间操作 - O(1)

因此,您可以多次使用它而不会影响性能。但更简洁的方法是使用 get() 一次,将其存储在局部变量中,然后他们重新使用该变量。

关于java - 每次迭代多次使用 ArrayList.get() 时是否会对性能产生影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42441273/

相关文章:

android - Unity Android游戏崩溃android.os.TransactionTooLargeException

Mysql Select Distinct w TRIM() 和 Subselect 优化性能

java - 将应用程序日历与谷歌日历同步

java - 是否有可能构建一个可以通过浏览器运行的 Web 自动化?

java - Selenium 检查文本是否不存在

java - 使用 BIRT 时面临 NullPointerException

android - 创建然后取消使用 AlarmManager 设置的多个警报

java - 有没有类似于传统线程的onPreExecute和onPostExecute的东西?

java - 设置 EditText.setText() 会导致应用程序崩溃

iOS Core Data - 获取一个实体对象是否会自动从关系实体中获取所有对象?