0

たとえば、一意の整数または長い ID などの数値のリストが与えられた場合、再現可能な「署名」を計算する最適な方法は何でしょうか (できれば要素の順序に関係なく)。

使用例は、ID のいずれかが (オブジェクトの) リストに追加または削除されたかどうかを検出することです。

Javaarray.hashCode()は、JVM 呼び出し間で一貫しているように見えても、要素の順序が変更されたり、同じ要素を持つ別のインスタンスが作成されたりすると、異なるハッシュを返すため、法案に適合しません。

int[] ids1 = {1, 2, 3};
System.out.println(ids1.hashCode());
// output: 980546781

int[] ids1Copy = {1, 2, 3};
System.out.println(ids1Copy.hashCode());
// output: 2061475679

int[] ids2 = {2, 1, 3};
System.out.println(ids2.hashCode());
// output: 140435067

私の理解では、配列内のプリミティブ要素の累積ハッシュ コードではなくids1.hashCode()、配列のメモリ アドレスのハッシュを計算します。

この場合、各要素を個別にハッシュする以外に、他にどのようなアプローチを使用できますか?

4

5 に答える 5