2012-08-03 21 views
1

爲什麼在任何Int上的Scala方法hashCode()返回相同的數字Scala方法hashCode()在任何Int上都是相同的數字?

+3

你爲什麼期望另一種行爲? – viktortnk 2012-08-03 07:49:02

+1

我假設你的意思是''7.hashCode == 13.hashCode''。你能舉一個例子來說明你的觀察嗎?我無法重現那種行爲。 – 2012-08-03 07:49:20

+0

@mhs,你是什麼意思?我沒有'7.hashCode == 13.hashcode':http://ideone.com/sjWYH – aioobe 2012-08-03 08:08:22

回答

12

因爲這就是如何定義整數的hashCode。

它滿足the contract很好:

  • 如果兩個對象是根據equals(Object)方法相等,則調用每個兩個對象的hashCode方法必須產生相同的整數結果。

最重要的是,它符合推薦

  • 它不是必需的:如果兩個對象根據equals(java.lang.Object)方法是不相等的,然後調用hashCode方法上兩個對象中的每一個都必須產生不同的整數結果。但是,程序員應該知道,爲不相等的對象產生不同的整數結果可以提高哈希表

事實上的性能,這是一個perfect hash function的一個例子。

相關問題