Lui*_*ixv 13 java iteration optimization keyset
我有以下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
}
}
Run Code Online (Sandbox Code Playgroud)
我收到"findBugs"的警告,告诉您:
方法myMethod使得无效地使用keySet迭代器而不是entrySet迭代器.警告在tmpList作业完成.
我不明白为什么这样效率低下.事实上,keys列表只计算一次.任何意见?谢谢.
Jes*_*per 26
而不是遍历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
}
Run Code Online (Sandbox Code Playgroud)
这样您就不必在地图中查找每个键; 你可以一次性获得关键和价值.
另外,声明你Map的类型参数:
public void myMethod (final Map<String, List<FeatureKey>> pFeatureGroupsFromPackage) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
您将获得所有钥匙,然后搜索集合中的每个钥匙
Map.EntrySet 迭代会快得多,一个小例子:
但你也应该使用泛型......
Set entries = map.entrySet();
Iterator entryIter = entries.iterator();
System.out.println("The map contains the following associations:");
while (entryIter.hasNext()) {
Map.Entry entry = (Map.Entry)entryIter.next();
Object key = entry.getKey(); // Get the key from the entry.
Object value = entry.getValue(); // Get the value.
System.out.println( " (" + key + "," + value + ")" );
}
Run Code Online (Sandbox Code Playgroud)