java - 在 Java 中迭代哈希表(谜题)

标签 java hashtable

所以这是一个难题:

“kb”是扩展 java.util.Hashtable 的类的实例 键是一个字符串,存储的值是一个名为“IntelCard”的类

此代码提取 key ,并尝试从表中打印数据

    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”的转储,它应该是一组键。但显然它只选择哈希表中最后一个“触及”的条目。 (在此测试中,“triguy”是最后一个添加的值。)

是否需要以某种方式重置哈希表选择器?这是没有意义的,因为代码通过键选择每个值。是否需要重置按键组 (ks) 上的选择器?这也没有意义,因为循环应该简单地迭代整个集合。

我不知道,我错过了什么?

---v

最佳答案

可能你也有同样的IntelCard与多个键关联的对象;为了确保您正在迭代所有键,请使用 String.format(key, ic.alliance, ic.might) 格式化字符串.
使用 Map.Entry<K,V> 迭代 map 而不是使用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);
}

关于java - 在 Java 中迭代哈希表(谜题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18692354/

相关文章:

c - 在 TCL 8.4 中,如果 #define NULL 0,TclLib 函数 Tcl_SetHashValue 是否允许值为 NULL?

java - 地址在本地机器上无效 [仅在 Windows 8 上]

java - 避免在 Spring 中为 TImeline 功能创建重复项

java - 我试图从solaris执行java,得到无效参数错误

java - YourKit: "objects which do not belong to particular web application"是什么意思?

c++ - 为什么在使用 unordered_map 的 emplace 方法时会出现编译错误?

java - 为什么键在 Java 中是不可变的?

java - Android:下载 flickr 图像

java - Java 中的哈希表手动冲突处理

arrays - PowerShell 中的 JSON 数组