1
HashMap을 사용하여 스파 스 그리드를 구현하려하지만 hashCode()를 재정의하면 예상 한대로 작동하지 않습니다.자바 해시 코드가 HashMap에서 작동하지 않습니까?
A
그러나, 출력은 다음과 같습니다 : 나는 수 출력을 예상하고있어
public class Main {
private static class Coord {
int x, y;
public Coord(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public int hashCode() {
// See https://en.wikipedia.org/wiki/Pairing_function#Cantor_pairing_function
return (((x + y) * (x + y + 1))/2) + y;
}
}
public static void main(String[] args) {
HashMap<Coord, String> grid = new HashMap<Coord, String>();
grid.put(new Coord(0, 0), "A");
System.out.println(grid.get(new Coord(0, 0)));
}
}
: 나는 다음과 같은 코드를 내 문제를 삶은했습니다
null
모두 "새로운 Coord (0, 0)"인스턴스는 같은 hashCode()를 반환해야하지만 예상대로 작동하지 않습니다. 왜 내가 기대했던대로 작동하지 않니?
당신은 또한 equals –
을 오버라이드해야합니다.'HashMap'은 원하는 것을하기 위해'hashCode'와'equals' 둘 다 필요로합니다. –