【发布时间】:2012-06-14 20:44:56
【问题描述】:
我有一个包含一个元素的列表,但以后可能会有更多。我使用的列表是一个 ArrayList。我发现通过调用 List.get(0) 而不是使用 for 循环可以获得更快的结果。为什么是这样?循环 1 项不应该与获取 1 项相同吗?如果没有,那么我怎样才能获得类似的性能?我知道我的数组最终会大于一项。我在 opengl 渲染器的主体中使用这个循环。当我使用循环时,我的 fps 会下降 45。
编辑:我已经解决了这个问题。每次渲染时,我的渲染器都会在列表中添加一个新值。
【问题讨论】:
-
“更快的结果”?这可能是一个无关紧要的微优化。与测试工具之外的操作相比,它会相形见绌。我的建议?在实际应用中测量出有意义的差异之前,请不要担心。
-
演示您描述的行为的代码示例将非常有帮助。列表有很多种,for 循环的编写方法也很多。
-
一个 ArrayList 在直接访问这样的元素方面会非常快。在数组列表上循环至少需要最少的启动(至少,设置索引,启动循环等,如果你使用了迭代器,对象创建等等。)
-
arraylist 是我使用 opengl 渲染的网格列表。我需要这样的快速性能。
-
我的目标是使用您的循环,以便您的代码易于更改,而不必担心性能。你测量过差异吗?这实际上是一个问题,还是您只是担心未来的表现?