1
私はHashMapを使用してスパースグリッドを実装しようとしていますが、hashCode()をオーバーライドしても期待通りの動作をしていないようです。しかし、出力がJavaのhashCodeはHashMapで動作しませんか?
A
:
null
どちらも私は、出力があることを期待してい
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)));
}
}
:私は次のコードに私の問題を煮詰めてきました"新しいCoord(0、0)"インスタンスは同じhashCode()を返さなければなりませんが、期待通りに動作していないようです。なぜ私は期待どおりに動作しませんか?
equalsも同じく –
をオーバーライドする必要があります。 'HashMap'は、あなたがしたいことをするために' hashCode'と 'equals'の両方を必要とします。 –