小编典典

在for循环条件下方法调用的效率

java

我正在编写一个游戏引擎,其中ArrayList使用for循环迭代保存在a 中的一组对象。显然,效率非常重要,因此我想知道循环的效率。

for (String extension : assetLoader.getSupportedExtensions()) {
    // do stuff with the extension here
}

getSupportedExtension()返回ArrayListString秒。我想知道的是,每次循环在新扩展上进行迭代时,是否都调用该方法。如果是这样,这样做会更有效:

ArrayList<String> supportedExtensions = ((IAssetLoader<?>) loader).getSupportedExtensions();

for (String extension : supportedExtensions) {
    // stuff
}

?提前致谢。


阅读 185

收藏
2020-11-16

共1个答案

小编典典

按照规范,这个成语

for (String extension : assetLoader.getSupportedExtensions()) {
  ...
}

扩展成

for (Iterator<String> it = assetLoader.getSupportedExtensions().iterator(); it.hasNext();)
{
    String extension = it.next();
    ...
}

因此,您询问的呼叫在循环初始化时仅发生一次。这是迭代器对象,其方法被重复调用。

但是,如果您真的对应用程序的性能感兴趣,那么您应该确保将重点放在大获胜而不是像这样的小土豆上。在任何代码段中,几乎都不可能使getter调用成为瓶颈。对于在HotSpot上运行的应用程序而言,此功能增加了一倍,它将内联getter调用并将其转换为直接现场访问。

2020-11-16