计算Objects.hash(Object... values)
时,参数的哈希值是如何组合的?
这里是javadoc,它说它相当于Arrays.hashCode(Object[])
。这就引出了一个问题:后者究竟是如何计算哈希的?
正如你所指出的,Objects.hash(Object...)
相当于Arrays.hashCode
。这个方法,反过来说,它等于Arrays.asList(arr).hashCode()
。List接口为hashCode定义了一个契约,它必须等价于:
int hashCode = 1;
for (E e : list)
hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
确实在List中的int hashCode()的文档中有答案。(由assylias建议)
int hashCode = 1;
for (E e : list)
hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());