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

时间:2011-07-12 08:28:04

标签: java list optimization size

我有一个很简单的函数。

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

list.size()

使用临时变量只获取一次是否更快,或者每次调用size()方法更快?

更新:这是ArrayList

注意:我知道自己在做什么,我不是在寻找有关优化以及应该或不应该如何进行的演讲。我只是在寻找答案。

4 个答案:

答案 0 :(得分:10)

完全取决于实施。您尚未指定list的类型 - 我认为它是List<E>或具体实现。

在某些实现中,例如ArrayList<E>它非常便宜 - 基本上是一个字段访问。诚然,只有记录才是恒定的时间:

  

sizeisEmptygetsetiteratorlistIterator操作会在固定时间内运行。

在其他地方,可能可能很昂贵。该界面不提供任何保证。我希望在大多数实现中它很便宜(恒定时间),但你永远不知道......

答案 1 :(得分:7)

这取决于List的实施 查看ArrayList的来源

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

因此,如果您使用局部变量或调用此方法

,则无关紧要

答案 2 :(得分:4)

检查出来(来自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)变量可以更快一些。如果这是您申请环境中的重要改进,您可能需要进行衡量。

答案 3 :(得分:0)

无论size()方法调用有多快。如果在一个代码块内多次调用该方法,假定该方法不会改变任何东西,那么引入一个变量来携带方法的结果是一个好习惯。