关于java hash的一点点记录
1.Object的hashCode()方法会保证总是返回不同的int值作为散列码,Object的equals方法直接比较两个对象的地址是否相同。
2.String类作为继承Object的例子,重新实现了equals()方法和hashCode()方法
equals()方法是将String中保存的字符串转换成字符数组进行逐个对比匹配,字符相等即为两个String相等(Object中原本是比较地址)。
hashCode()方法也进行了重新实现,针对相同内容的String,会根据其字符数组的每个字符计算散列值并进行求总和,从而保证相同内容的String的hashCode()会返回相同值。
3.equals()方法的意义就是两个对象相等,比如在HashSet中,需要判断加入的对象是否已经存在,也就是需要判断是否已经有相等的对象,比如String类型的对象,用普通的equals方法比较的时候效率很低,并且无法实现hash读取,使用hashCode()可以快速判断出对象的不同,但是还是要经过equals()方法才能确定两个对象确实相同,所以equals相等的对象,hashCode()一定是相等的。
4.我的理解是:hashCode()主要就是为了实现Hash系列集合而存在,虽然没有仔细去探究Java中具体的Hash函数,但是我感觉差不多就是这样一个原理:键值对象存入Hash集合的时候,根据键对象的hashCode()和集合的Hash函数进行存入键和值,读取的时候再根据键对象的hashCode()和集合的Hash函数进行快速读取值,从而利用Hash的思想大大提高数据的存取效率,避免了普通低效的查找,达到常数时间的存取效率。