2

Java でオブジェクトを格納するための高速コンテナーが必要です。オブジェクトには (静的) XYZ 座標があり、すべてのオブジェクトには異なる座標があります。基本的にはグリッドですが、0,0,0 を中心としない場合があります (グリッドに欠けている部分がある場合があります)。

整数をキーとしてマップを使用し、座標をビットシフトして、すべての座標に一意の番号を作成しようとしました。しかし、数値が 255 (8 ビット) よりも大きい場合、これはうまく機能しませんでした。

また、マップは実際には配列の値ではなく参照を参照するため、配列はキーとして機能しません。String をキーとして使用することもできますが、オブジェクトにアクセスするたびに、String を (再) 構築する必要があります。

今、私は ArrayList を使用してすべてのキーをループしていますが、それは本当に遅いです。では、オブジェクトを保存する最速の (そしてメモリ効率の良い) 方法は何でしょうか?

4

1 に答える 1

3

キーとして使用するカスタム hashCode() および equals() メソッドを使用して、カスタム クラスを作成します。

public static class Vertex {
    public int x, y, z;
    public boolean equals(Object o){
        if(this == o) return true;
        if(!(o instanceof Vertex)) return false;
        Vertex v = (Vertex)o;
        return x == v.x && y == v.y && z == v.z;
    }

    public int hashCode(){
        //  Use whatever prime numbers you like
        return x ^ y * 137 ^ z * 11317;
    }
}

キーとして使用しているインスタンスの値を絶対に変更しないでください。

これは、単純な整数を使用するよりもそれほど悪くはありません。それでも実質的に一定時間のアクセスです。

于 2013-03-03T19:53:13.220 に答える