Objects.hash(对象. .values):值的哈希值是如何组合的



计算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());

最新更新