hash也叫散列,用于把任意长度的输入转换为固定长度的摘要
常用的hash算法有MD5(输出长度128)、SHA-1(输出长度160)、SHA-256(输出长度256)、SHA-512(输出长度512)
输出长度越长,产生hash碰撞的概率越小
jdk中的Object类提供的hashCode()方法,返回的是对象的地址加上字段的信息组成的一个32位int
为什么说重写equals方法也要重写hashCode()方法,因为如果把对象用做HashMap中的key,那从语义上来理解,equals的两个对象,hashCode()必须相同。如果不重写hashCode()的话,排除哈希冲突的情况,两个对象的hashCode()一定是不同的
之所以可以直接用String、Long、Integer当对象,是因为他们的hashCode()方法都被重写了,语义上相同的两个String或两个Long,hashCode()是相同的