この質問はかなり素人ですが、同じオブジェクトインスタンスをキーとして使用すると、ハッシュマップが値を格納または取得しない理由を理解できません。 。私のコードは次のとおりです。ハッシュコードをオーバーライドしても両方の値が取得されない同じオブジェクトのハッシュコード&イコールを
public class Candidate {
private String id;
private String name;
public Candidate (String id, String name){
this.id = id;
this.name = name;
}
public static void main(String args[]){
Candidate cad = new Candidate("101","hari");
HashMap<Candidate,String> mp = new HashMap<Candidate,String>();
mp.put(cad, "sachin");
mp.put(cad, "shewag");
for(Candidate cand : mp.keySet()){
System.out.println(mp.get(cand).toString());
}
}
私は以下のようにハッシュコードをオーバーライドしています。
@Override
public boolean equals(Object obj){
Candidate cad =(Candidate)obj;
if(!(obj instanceof Candidate)){
return false;
}
if(cad.id.equals(this.id) && cad.name.equals(this.name)){
return true;
}
return false;
}
@Override
public int hashCode(){
return Objects.hash(id, name);
}
ハッシュマップのサイズを取得しようとすると、1つのみとして返されます。つまり、ハッシュマップへの最初の挿入は、2番目の挿入によってオーバーライドされました。
私は2つの値を挿入するために候補の同じインスタンスを使用しているからですか?両方のキー、値のペアを挿入するようにハッシュマップを強制することは可能ですか?
サイドノートでは、このキャスト '候補CAD =(候補者)は、obj;'前のチェックに'obj instanceof Candidate'は、待っている' ClassCastException'のようです。 –