Hug*_*nto 4 java arrays algorithm math
给定一组数字,我想创建一个数字标识符,表示该组合尽可能唯一.
例如:
int[] inputNumbers = { 543, 134, 998 };
int identifier = createIdentifier(inputNumbers);
System.out.println( identifier );
Run Code Online (Sandbox Code Playgroud)
输出:
4532464234
Run Code Online (Sandbox Code Playgroud)
- 返回的号码必须尽可能唯一
- 元素的排序必须影响结果
- 算法必须始终从同一输入数组返回相同的结果
- 算法必须尽可能快地在'for'循环中使用
该算法的目的是创建一个存储在DB中的小值,并且易于比较.这并不重要,所以一些数字数组返回相同的值是可以接受的,但这种情况必须是罕见的.
你能建议一个很好的方法来实现这个目标吗?
标准(Java 7)实现Arrays.hashCode(int[])具有所需的属性.因此实施:
2938 public static int hashCode(int a[]) {
2939 if (a == null)
2940 return 0;
2941
2942 int result = 1;
2943 for (int element : a)
2944 result = 31 * result + element;
2945
2946 return result;
2947 }
Run Code Online (Sandbox Code Playgroud)
如您所见,实现很快,结果取决于元素的顺序以及元素值.
如果要求所有Java平台上的哈希值都相同,我认为您可以依赖于满意度.javadoc表示该方法将返回一个与调用List<Integer>.hashcode()等效列表时相同的值.而对于哈希码公式被指定.