[英]Use list.size() or a variable for multiple use ? (local optimization)
我有一个简单的 function 调用了很多。
在这个 function 中,我对列表的大小(包含大约 10 个元素)有很多调用:
list.size()
我使用临时变量只获取一次大小会更快,还是每次调用size()
方法更快?
更新:它是ArrayList
。
注意:我知道我在做什么,我不是在寻找关于优化以及应该如何做或不应该做的讲座。 我只是在寻找答案。
这完全取决于实施。 您没有指定list
的类型 - 我假设它是List<E>
或一些具体的实现。
在诸如ArrayList<E>
之类的一些实现中,它非常便宜——基本上是字段访问。 诚然,它仅记录在恒定时间方面:
size
、isEmpty
、get
、set
、iterator
和listIterator
操作在恒定时间内运行。
在其他情况下,它可能会很昂贵。 该接口不提供任何保证。 我希望它在大多数实现中都很便宜(恒定时间),但你永远无法确定......
这取决于查看ArrayList
源的List
的实现
/**
225 * Returns the number of elements in this list.
226 *
227 * @return the number of elements in this list
228 */
229 public int size() {
230 return size;
231 }
232
所以不管是取局部变量还是调用这个方法
看看这个(来自ArrayList
和LinkedList
):
/**
* Returns the number of elements in this list.
*
* @return the number of elements in this list
*/
public int size() {
return size;
}
调用list.size()
与调用方法并将值放入堆栈一样有效:(几乎)可以忽略不计。 当然,使用本地( final
)变量会快一点。 如果这在您的应用程序上下文中是否是一项重要的改进,您可能必须进行衡量。
不管size()
方法调用有多快。 如果该方法在代码块中被多次调用,假设该方法没有改变任何东西,那么引入一个变量来携带该方法的结果是一个很好的做法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.