java对象比较 hashcode_Java Objects.hash()与自己实现的hashCode()比较
Java?7新增了Objects類(lèi),它為對(duì)象提供了一些便捷的靜態(tài)方法,如equals(),hashCode(),hash(),compare(),toString()等等。
這里比較一下Objects.hash()與自己實(shí)現(xiàn)的hashCode()。
傳統(tǒng)實(shí)現(xiàn)的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()內(nèi)部實(shí)現(xiàn)實(shí)則為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...),它的參數(shù)為不定參數(shù),需要為Object對(duì)象。這會(huì)有以下一些影響:對(duì)基本類(lèi)型做hashCode需要轉(zhuǎn)換為包裝類(lèi)型,如long轉(zhuǎn)換為L(zhǎng)ong
會(huì)創(chuàng)建一個(gè)Object[]數(shù)組
如果hashCode()方法被頻繁調(diào)用的話,會(huì)有一定的性能影響。
總結(jié)
以上是生活随笔為你收集整理的java对象比较 hashcode_Java Objects.hash()与自己实现的hashCode()比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java程序设计 徐红_Java程序设计
- 下一篇: java控制台输入空格输出后不显示_为撒