我有以下 Java 代码:
public void myMethod (final Map pFeatureGroupsFromPackage) {
final Set<String> keys = pFeatureGroupsFromPackage.keySet();
for (final String key : keys) {
tmpList = (List<FeatureKey>) pFeatureGroupsFromPackage.get(key);
// do whatever
}
}
我收到来自“findBugs”的警告,内容如下:
方法 myMethod
低效地使用了 keySet 迭代器而不是 entrySet 迭代器。
警告是在 tmpList
分配时完成的。
我不明白为什么这是低效的。事实上,keys
列表只计算一次。
任何意见?谢谢。
最佳答案
不是遍历 keySet
并调用 get
来为每个键获取相应的值,而是遍历 entrySet
:
final Set<Map.Entry<String, List<FeatureKey>>> entries = pFeatureGroupsFromPackage.entrySet();
for (Map.Entry<String, List<FeatureKey>> entry : entries) {
String key = entry.getKey();
List<FeatureKey> tmpList = entry.getValue();
// do whatever
}
这样您就不必在 map 中查找每个键;直接一次性获取key和value。
此外,使用类型参数声明您的 Map
:
public void myMethod (final Map<String, List<FeatureKey>> pFeatureGroupsFromPackage) {
// ...
}
关于keySet 上的 Java 迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5430883/