一位同事今天发出了一个提示,指出后一段代码更有效率,因为它不需要像前者那样在每次迭代中在地图中进行查找(#1).
#2(后者)如何更有效率?我只是不明白#1和#2是如何不同的.
**#1 snippet**:
for (String key : map.keySet())
{
String value = map.get(key); // does lookup for every key
// do something with value
}
Run Code Online (Sandbox Code Playgroud)
**#2 snippet**:
for (Map.Entry<String, String> entry : map.entrySet())
{
String key = entry.getKey();
String value = entry.getValue();
}
Run Code Online (Sandbox Code Playgroud)
Lou*_*man 10
问题是map.get通常具有显着的恒定因子成本,而迭代map.entrySet()通常与迭代一样便宜map.keySet().
这对于诸如TreeMap第一个循环实际上是O(n log n)而第二个循环将是O(n)的情况最为重要,但即便如此HashMap,get也有一个可以通过第二个循环避免的常数因子成本.
| 归档时间: |
|
| 查看次数: |
2874 次 |
| 最近记录: |