0

java中的containsValue是如何工作的?它是否将给定对象与地图中已有的值进行比较?如果是这样,为什么这不起作用?

我有以下课程:class Node{ Integer n; Integer wt; String v; }

并使用此映射: Map map = new HashMap();

这段代码没有按预期工作:`

n = Integer.parseInt(st.nextToken());
wt = Integer.parseInt(st.nextToken());
depth = Integer.parseInt(st.nextToken());
set = "";
while(st.hasMoreTokens())
   set = set+st.nextToken()+" ";
Node nd = new Node();
nd.n = n;
nd.wt = wt;
nd.v = set;
if(!map.containsValue((Object)nd)){
map.put(key,nd);
key = key+1;
}`

映射中仍有重复值。

4

2 回答 2

4

一定要实现hashCodeequals如果你正在使用 HashMap,否则每个新对象都是一个新的和不同的对象,不管它是由什么值组成的。

于 2013-01-15T07:24:00.767 回答
0

使用 Maps 和 Sets 时,您必须确保值的类(在 Map 的情况下,当然还有键)实现足够的hashCode()equals()方法。如果不明确提供它们,系统可能无法真正理解您的应用程序的语义等价性。

于 2013-01-15T07:31:00.263 回答