Hashmap 中的 key 值为自定义类型,使用 containsKey 方法无法判断 Key 是否在 Hashmap 中,求教。

2016-01-18 09:55:44 +08:00
 anonymoustian

我在 Java 中用 Twowords 类封装了两个元素,这两个元素作为 Hashmap 的 Key 共同确定了 Hashmap 中的 Value ,但是我在写代码的过程中,需要判断 Twowords 对象是否在 Hashmap 里从而确定是否对 Value 赋值或者对 Value 进行自增操作。
但是我写的代码并不能判断 Hashmap 是否有 Key 值,问题应该出在 new 上,请问有没有好的解决办法?

HashMap<Twowords, Double> transitions = new HashMap<Twowords, Double>();

Twowords tmp = new Twowords(first, second);

if (transitions.containsKey(tmp)){
transitions.put(tmp, transitions.get(tmp) + 1.0);
}
else{
transitions.put(tmp, 1.0);
}

也就是说 if 判断永远为假,请问怎么解决呢? 谢谢!

5255 次点击
所在节点    Java
28 条回复
kaedea
2016-01-18 13:59:45 +08:00
看下 containsKey 的源码立刻就知道了
20015jjw
2016-01-18 15:08:04 +08:00
@ilaipi 俩 key 即使 hashcode 一样 hashmap 也能 handle 的...
iburu
2016-01-18 15:31:58 +08:00
这问题。。。
slixurd
2016-01-18 15:59:48 +08:00
@20015jjw hashcode 一样的确能处理,大不了就是退化成一条链表
但是楼主的 hash 和 equals 写的是一样的,那就其实都是逻辑相等了。
tonic
2016-01-18 16:34:19 +08:00
你并没有 `put tw3` 啊... 当然没有...
henryhuangs
2016-01-18 17:15:57 +08:00
equals 里面不要用 hashcode 对比,两个 element.equals 就行,另外 hashCode()里可以调用 apache 的 HashCodeBuilder
wuyadong
2016-01-18 19:50:47 +08:00
..... 要自己先学会找 bug
MRJ
2016-01-18 19:51:52 +08:00
基础没学好啊,要重写 hashcode 和 equals 方法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/251496

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX