以eclipse为例,直接鼠标右键即可复写equals和hashCode,^_^
问题:为什么用eclipse复写hashCode方法,有31这个数字?
计算机的乘法涉及到移位运算。当一个数乘以2时,就直接拿该数左移一位即可!选择31原因是因为31是一个素数!所谓素数:质数又称素数(在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数)
在存储数据计算hash地址的时候,我们希望尽量减少有同样的hash地址,所谓“冲突”。
因为任何数n*31就可以被JVM优化为(n<<5)-n,移位和减法的操作效率要比乘法的操作效率高的多,对左移虚拟机里面都有做相关优化,并且31只占用5bits!
Eclipse工具里equals的重写
于 2019-09-09 22:34:52 首次发布