在调用 y 方法.size()时,ArrayList我们是给出重新计算列表大小的命令,还是简单地从内存中读取一个存储列表大小的“服务”变量?
假设我们有一个包含 1_000_000 个非常大的字符串的列表。两种实现之间会有性能差异吗?
第一个选项:
for (int i = 0; i < list.size(); i++) {...}
第二个选项:
int k = list.size();
for (int i = 0; i < k; i++) {...}
在调用 y 方法.size()时,ArrayList我们是给出重新计算列表大小的命令,还是简单地从内存中读取一个存储列表大小的“服务”变量?
假设我们有一个包含 1_000_000 个非常大的字符串的列表。两种实现之间会有性能差异吗?
第一个选项:
for (int i = 0; i < list.size(); i++) {...}
第二个选项:
int k = list.size();
for (int i = 0; i < k; i++) {...}
你有两个不同的问题。
list.size()list.size()吗?如果您不更改循环体中数组的大小,那么您的选项是相同的。从某种意义上说,优化器很可能会缓存返回值
list.size(),甚至不会在每次迭代时调用该函数。第一个选项将与第二个选项相同。如果您更改循环体中的数组,那么第一个选项的工作将不同于第二个。两种选择都可能出现问题。
该类
ArrayList有一个private int size包含列表长度的属性。方法返回此属性的值。那些。答案是这样的——当请求列表的长度时,它不会被重新计算(事实上——正如你所写的,“我们只是从内存中读取”服务“变量”)。