首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中迭代Hashtable (益智)

在Java中迭代Hashtable (益智)
EN

Stack Overflow用户
提问于 2013-09-09 06:08:32
回答 2查看 478关注 0票数 0

这是一个难题:

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

此代码提取键,并努力从表中打印数据。

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

这是输出:

代码语言:javascript
复制
[commanderv, repo, olaf, triguy]
triguy                                  galactica    10000
triguy                                  galactica    10000
triguy                                  galactica    10000
triguy                                  galactica    10000

我们可以看到“k”的转储,它应该是一组键。但是很明显,它只选择了Hashtable中的最后一个“触摸”条目。(在这次测试中,"triguy“是最后一次增值。)

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

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

-v

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-09 06:14:31

可能您有一个与多个键相关联的IntelCard对象;为了确保您正在迭代所有键,请使用String.format(key, ic.alliance, ic.might)格式化字符串。

使用Map.Entry<K,V>迭代映射,而不是使用keySet()/get()对:

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

Stack Overflow用户

发布于 2013-09-09 06:19:05

显然,您使用不同的键添加了4个类似的(相同的字段toString() ) IntelCards。Hashtable有唯一的键,而不一定是唯一的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18692354

复制
相关文章

相似问题

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