我正在编写一个游戏引擎,其中ArrayList使用for循环迭代保存在a 中的一组对象。显然,效率非常重要,因此我想知道循环的效率。
ArrayList
for (String extension : assetLoader.getSupportedExtensions()) { // do stuff with the extension here }
当getSupportedExtension()返回ArrayList的String秒。我想知道的是,每次循环在新扩展上进行迭代时,是否都调用该方法。如果是这样,这样做会更有效:
getSupportedExtension()
String
ArrayList<String> supportedExtensions = ((IAssetLoader<?>) loader).getSupportedExtensions(); for (String extension : supportedExtensions) { // stuff }
?提前致谢。
按照规范,这个成语
for (String extension : assetLoader.getSupportedExtensions()) { ... }
扩展成
for (Iterator<String> it = assetLoader.getSupportedExtensions().iterator(); it.hasNext();) { String extension = it.next(); ... }
因此,您询问的呼叫在循环初始化时仅发生一次。这是迭代器对象,其方法被重复调用。
但是,如果您真的对应用程序的性能感兴趣,那么您应该确保将重点放在大获胜而不是像这样的小土豆上。在任何代码段中,几乎都不可能使getter调用成为瓶颈。对于在HotSpot上运行的应用程序而言,此功能增加了一倍,它将内联getter调用并将其转换为直接现场访问。