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()比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java程序设计 徐红_Java程序设计
- 下一篇: java控制台输入空格输出后不显示_为撒