欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

java对象比较 hashcode_Java Objects.hash()与自己实现的hashCode()比较

发布时间:2025/5/22 java 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java对象比较 hashcode_Java Objects.hash()与自己实现的hashCode()比较 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Java 7新增了Objects类,它为对象提供了一些便捷的静态方法,如equals(),hashCode(),hash(),compare(),toString()等等。

这里比较一下Objects.hash()与自己实现的hashCode()。

传统实现的hashCode@Override

public int hashCode() {

int hash = 5;

hash = 67 * hash + (int)(this.id ^ (this.id >>> 32));

hash = 67 * hash + (int)(this.timestamp ^ (this.timestamp >>> 32));

hash = 67 * hash + Objects.hashCode(this.severity);

hash = 67 * hash + Objects.hashCode(this.thread);

hash = 67 * hash + Objects.hashCode(this.classPath);

hash = 67 * hash + Objects.hashCode(this.message);

return hash;

}

使用Objects.hash()@Override

public int hashCode() {

return Objects.hash(id, timestamp, severity, thread, classPath, message);

}

Objects.hash()内部实现实则为Arrays.hashCode()方法public static int hash(Object... values) {

return Arrays.hashCode(values);

}

Arrays.hashCode()源码public static int hashCode(Object a[]) {

if (a == null)

return 0;

int result = 1;

for (Object element : a)

result = 31 * result + (element == null ? 0 : element.hashCode());

return result;

}

注意Objects.hash(Object...),它的参数为不定参数,需要为Object对象。这会有以下一些影响:对基本类型做hashCode需要转换为包装类型,如long转换为Long

会创建一个Object[]数组

如果hashCode()方法被频繁调用的话,会有一定的性能影响。

总结

以上是生活随笔为你收集整理的java对象比较 hashcode_Java Objects.hash()与自己实现的hashCode()比较的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。