이 질문은 꽤 아마추어 일지 모르지만, 같은 오브젝트 인스턴스를 키로 사용할 때 hashmap이 값을 저장하거나 검색하지 못하는 이유를 이해하는 데 어려움이있다. . 내 코드는 다음과 같습니다.해시 코드를 오버라이드 한 후에도 같은 값의 오브젝트를 모두 오버라이드 한 후에도 HashMap 값을 모두 가져 오지 않는다.
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);
}
해시 맵의 크기를 가져 오려고하면 하나만 반환됩니다. 즉, 해시 맵에 처음 삽입 될 때 두 번째 삽입이 무시됩니다.
두 개의 값을 삽입하기 위해 동일한 후보 인스턴스를 사용하고 있기 때문에 그것이 사용 되었습니까? hashmap이 키와 값 쌍을 모두 삽입하도록 할 수 있습니까?
이 캐스트'후보 CAD = (후보) obj가, '이전에 검사에 'obj instanceof Candidate'는 기다리고있는 ClassCastException처럼 보입니다. –