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

HashMap を使用している場合は必ず実装hashCodeしてくださいequals。そうしないと、作成された値に関係なく、新しいオブジェクトはそれぞれ新しい別のオブジェクトになります。

于 2013-01-15T07:24:00.767 に答える
0

マップとセットを使用する場合、値のクラス (マップの場合はもちろんキーも) が適切なhashCode()およびequals()メソッドを実装していることを確認する必要があります。それらを明示的に提供しないと、システムはアプリケーションのセマンティックの同等性を実際に理解できません。

于 2013-01-15T07:31:00.263 に答える