簡體   English   中英

密鑰集上的Java迭代

[英]Java Iteration over a 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
   }
}

我收到“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

public void myMethod (final Map<String, List<FeatureKey>> pFeatureGroupsFromPackage) {
    // ...
}

你得到了所有的密鑰,然后搜索集合中的每個密鑰

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 + ")" );
      }

這可以幫助你:

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);
}

示例代碼:

for (Map.Entry < Integer, List < FeatureKey >>> i: map.entrySet()) {
    System.out.println(i.getValue() + " " + i.getKey()));
}

可能是您要兩次查詢地圖:

  • 首先是鑰匙,
  • 第二個是價值觀

使用entryset迭代器將迭代地圖一次。

通過keySet迭代器訪問HashMap比使用TreeMap上的keySet迭代器更快。

嘿Luixv,使用keysey迭代器的原因不如entryset iteratot有效,第一個選項仍然需要使用Map.get(key)lookeup,這是第二個選項避免的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM