首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java中的HashMap不能工作吗?

Java中的HashMap不能工作吗?
EN

Stack Overflow用户
提问于 2012-07-09 14:57:47
回答 1查看 181关注 0票数 1

下面是我的代码:

代码语言:javascript
运行
复制
double getRevenue(KeywordGroupKey key) {
    Double r = revenueMap.get(key);
    System.out.println(key + "\t" + key.hashCode());
    for (KeywordGroupKey other : revenueMap.keySet()) {
        System.out.println(other.toString() + "\t" + other.hashCode());
        if(other.equals(key))
            System.out.println("equals here...");
    }
    if(r == null)
        r = 0.0;
    return r;
}

下面是输出:

代码语言:javascript
运行
复制
优惠打折,优惠券|"优惠券"  955095524
brand+点评团购|大众点评 726983298
brand-品牌词相关|团购网站大全  -713384514
brand-品牌词|点评网   2029153675
brand+点评团购|大众点评网    261410621
优惠打折,优惠券|"优惠券"  955095524
equals here...

所以很奇怪,方法返回的值是空的,为什么会发生这种情况呢?因为在revenueMap中有一个键,所以具有相同的散列码,并且等于参数键。下面是revenueMap和密钥的当前状态:

代码语言:javascript
运行
复制
{brand+点评团购|大众点评=28.0, brand-品牌词相关|团购网站大全=49.9, brand-品牌词|点评网=21.0, brand+点评团购|大众点评网=167.0, 优惠打折,优惠券|"优惠券"=9.9}
优惠打折,优惠券|"优惠券"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-09 15:11:23

我的猜测是KeywordGroupKey是可变的,并且相关的键在被用作散列映射的键之后被修改。

如果是这种情况,那么键就在HashMap中错误的“存储桶”中,get()方法(或containsKey()方法)永远不会找到它(但迭代键和/或条目将会找到它!)。

例如,假设您的类中有一个属性foo,并且该属性与您的hashCode()equals()方法相关。下面的代码将“破坏”HashMap

代码语言:javascript
运行
复制
KeywordGroupKey key = ...
revenueMap.put(key, someValue);
key.setFoo("differentValue");
Double result = revenueMap.get(key); // will return nothing!
Double result = revenueMap.get(originalValueOfKey); // will *also* return nothing!
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11390326

复制
相关文章

相似问题

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