2013-05-12 18 views
0

我创建了一个带有颜色对象作为关键字的哈希表。我的源代码如下所示:在哈希映射中查找关键字

HashMap<Color,Integer> hm = new HashMap<Color,Integer>(); 

现在我想检查,如果已经有一个颜色对象作为HashMap中的关键字。所以我试过这个:

if (hm.get(colorObject) != null){ 

不幸的是,它返回false,虽然颜色是相同的。我在控制台上打印颜色,始终是java.awt.Color[r=254,g=0,b=0]。我也尝试了从HashMap的方法containsKey

那又怎么了?我如何检查散列表中是否有对象?

+3

如果'Color'对象正确地实现'equals'和'hashCode'(我认为它确实如此,因为它是纯粹的'java.awt.Color'),它应该可以工作。 – NilsH 2013-05-12 09:04:22

+1

它可能是你错误地在地图中添加了这个颜色的null。 – 2013-05-12 09:11:18

回答

2

尝试if(hm.containsKey(colorObject))

+0

OP已经尝试过。 – NilsH 2013-05-12 09:07:27

+0

我再次尝试了containsKey,它工作。谢谢。但我不知道为什么。 – JavaForAndroid 2013-05-12 09:09:53

+0

这是神奇的,它的作品.. ^^对不起,我错过了@NilsH – kelunik 2013-05-12 09:14:11

0

我尝试这样做:

final Map<Color, Integer> colors = new HashMap<>(); 
colors.put(new Color(3030), 1); 
System.out.println(colors.get(new Color(3030))); 

输出功率为1,符合市场预期。因此,您的问题不像您在问题中所描述的那样普遍。