繁体   English   中英

使用 list.size() 或变量进行多次使用? (局部优化)

[英]Use list.size() or a variable for multiple use ? (local optimization)

我有一个简单的 function 调用了很多。

在这个 function 中,我对列表的大小(包含大约 10 个元素)有很多调用:

list.size()

我使用临时变量只获取一次大小会更快,还是每次调用size()方法更快?

更新:它是ArrayList

注意:我知道我在做什么,我不是在寻找关于优化以及应该如何做或不应该做的讲座。 我只是在寻找答案。

这完全取决于实施。 您没有指定list的类型 - 我假设它是List<E>或一些具体的实现。

在诸如ArrayList<E>之类的一些实现中,它非常便宜——基本上是字段访问。 诚然,它仅记录在恒定时间方面:

sizeisEmptygetsetiteratorlistIterator操作在恒定时间内运行。

在其他情况下,它可能会很昂贵。 该接口不提供任何保证。 我希望它在大多数实现中都很便宜(恒定时间),但你永远无法确定......

这取决于查看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   

所以不管是取局部变量还是调用这个方法

看看这个(来自ArrayListLinkedList ):

/**
 * 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM