簡體   English   中英

迭代Java中的Hashtable(謎題)

[英]Iterating Hashtable in Java (puzzle)

所以這就是難題:

“kb”是擴展java.util.Hashtable的類的實例鍵是String,存儲的值是名為“IntelCard”的類

此代碼提取密鑰,並努力從表中打印數據

    Set<String> ks = kb.keySet();
    System.out.println(ks); // is this what we thought?
    for(String key: ks){
        IntelCard ic = kb.get(key);
        String o = String.format("%-24s %24s %8s", 
                          ic.name, ic.alliance, ic.might);
        System.out.println(o);
    }

這是輸出:

[commanderv, repo, olaf, triguy]
triguy                                  galactica    10000
triguy                                  galactica    10000
triguy                                  galactica    10000
triguy                                  galactica    10000

我們可以看到“ks”的轉儲,它應該是一組鍵。 但顯然它只選擇Hashtable中最后一個“觸及”的條目。 (在此測試中,“triguy”是最后添加的值。)

是否需要以某種方式重置Hashtable選擇器? 它沒有意義,因為代碼按鍵選擇每個值。 是否需要重置按鍵組(ks)上的選擇器? 這沒有任何意義,因為循環應該簡單地迭代整個集合。

我不知道,我錯過了什么?

--- v

可能你有與多個鍵相關的相同IntelCard對象; 確保您迭代所有鍵,使用String.format(key, ic.alliance, ic.might)格式化字符串。
使用Map.Entry<K,V>迭代地圖而不是使用keySet()/get()對:

for(final Map.Entry<String,IntelCard> e : kb.entrySet()) {
  IntelCard ic = e.getValue();
  String o = String.format("%-24s %24s %8s", ic.name, ic.alliance, ic.might);
  System.out.println(o);
}

顯然你添加了4個類似的(相同的toString()字段)具有不同鍵的IntelCards。 Hashtable具有唯一鍵,不一定是唯一值。

暫無
暫無

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

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