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;
}`
映射中仍有重复值。
答案 0 :(得分:4)
如果您正在使用HashMap,请确保实现hashCode
和equals
,否则每个新对象都是一个新的不同对象,无论它是由哪个值组成。
答案 1 :(得分:0)
使用地图和集合时,您必须确保您的值的类(当然,在Map的情况下,也包括键)实现了足够的hashCode()和equals()方法。如果没有明确地提供它们,系统就无法真正理解应用程序的语义等效性。