我有以下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列表只计算一次。有什么意见吗?谢谢。
发布于 2011-03-25 17:57:42
不是遍历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中查找每个键;您可以直接一次性获得键和值。
另外,使用类型参数声明您的Map:
public void myMethod (final Map<String, List<FeatureKey>> pFeatureGroupsFromPackage) {
// ...
}发布于 2011-03-25 17:56:27
您将获得所有的键,然后在集合中搜索每个键
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 + ")" );
}发布于 2014-08-04 17:29:33
这可能会对你有所帮助:
Map map = new HashMap();
Iterator entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
Integer key = (Integer)entry.getKey();
Integer value = (Integer)entry.getValue();
System.out.println("Key = " + key + ", Value = " + value);
}https://stackoverflow.com/questions/5430883
复制相似问题