2次元のfloat []配列がたくさんあるので、それらの頂点リストをキー付きマップにキャッシュしようとしています。
(読み取り)パフォーマンス上の理由から、longまたはintのキーは文字列のキーより速いはずです。
objectmap<key,float[]>
値からint / longキーを作成することは可能ですか?
keyForVertices = generateKeyFromVertices(float[]{...})
float []内の同じ値に対して、生成されたキーはfloat []値ごとに一意であるべきです。
arrAKey = generate from float[]{-10,10,20,20,30,30}
arrBKey = generate from float[]{-10,10}
arrCKey = generate from float[]{10,-10}
arrAKey!=arrBKey
arrBKey!=arrCKey
arrAKey!=arrCKey
**編集 java.util.Arrays.hashCode(float [])が機能しないのはなぜですか?
回答:
回答№1は1どんなハッシュまたはチェックサムアルゴリズムも与えるでしょうあなたは安定した結果です(同じコンテンツに対して常に同じ答え)。アルゴリズムの品質によって、競合の数(同じ結果を返すさまざまなコンテンツ)が決まります。あなたは標準を使用することができます Java CRC32チェックサム しかし、浮動小数点数ではなく、本当にバイト数が必要です。
私はあなたの提案を使用すると思います Arrays.hashCode(float[])
あなたが望むものを正確に返します(比較的安定したintが、与えられた配列の内容から決定論的に計算されます)。
頂点配列のキャッシュを開始したら、いずれにしても、これらの配列が変更されたり変更されたりする場合は、特に注意が必要です。 (キャッシュされたエントリは無効にする必要があります。そして、共有するつもりではなかった突然変異を共有することになるかもしれません。)
回答№2の場合は1
Cantorペアリング機能またはSzudzik法を使用できます。これをチェックして 回答。 2つ以上の番号については、ペアリング機能のペアリングを使用できます。