首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于keySet的Java迭代

基于keySet的Java迭代
EN

Stack Overflow用户
提问于 2011-03-25 17:54:06
回答 7查看 42.5K关注 0票数 15

我有以下Java代码:

代码语言:javascript
复制
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列表只计算一次。有什么意见吗?谢谢。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-03-25 17:57:42

不是遍历keySet并调用get来获取每个键的相应值,而是遍历entrySet

代码语言:javascript
复制
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

代码语言:javascript
复制
public void myMethod (final Map<String, List<FeatureKey>> pFeatureGroupsFromPackage) {
    // ...
}
票数 29
EN

Stack Overflow用户

发布于 2011-03-25 17:56:27

您将获得所有的键,然后在集合中搜索每个键

Map.EntrySet迭代会快得多,举个小例子:

但是你也应该使用泛型...

代码语言:javascript
复制
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 + ")" );
      }
票数 4
EN

Stack Overflow用户

发布于 2014-08-04 17:29:33

这可能会对你有所帮助:

代码语言:javascript
复制
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);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5430883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档