为啥 equals 和 hashCode 需要同时重写
延伸阅读:immutable class 待解读
String的equals(), hashCode()
String hash 算法:
s[0]31^(n-1) + s[1]31^(n-2) + ... + s[n-1]
for (int i = 0; i < value.length; i++) { h = 31 * h + val[i]; }
31 是一个神奇的数字,貌似是冲突比较少,比较平均的经验值。
戳这里也有一个例子
hash 冲突处理
两种:Separate chaining(同hash 加链表) |Open addressing(同hash 存下一地址)
区别:冲突时是否将数据存在同一 bucket。
java hashMap 的实现和冲突处理
待续