引言
本文不对重写hashcode和equals方法的具体实现做出解释,仅仅阐述重写俩种方法的必要性
首先我们要清楚,一个对象在内存中存放的地址是唯一的
其次我们要清楚,哈希码不同的对象肯定不是同一个对象!但不同对象的哈希码可能会一样,不同对象通过同一哈希码确定的在集合中存放的位置可能会一样,从而产生哈希冲突,也叫哈希碰撞
再次我们要清楚,重写equals方法后可以判定出两个地址不同但内容相同的对象;重写hashcode方法后可以令两个地址不同但内容相同的对象的哈希码一致,进而使内容相同的对象隶属于同一集合索引位!
正文开始
我们以两个内容相同的字符串来举例吧
String s1=new String("hello")
String s2=new String("hello")
我们的目的是把"hello"放到Hashset集合里面,HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合
这时候假设我们先把s1放到Hashset里面。其实已经达到了我们的目的,但是为了验证元素的唯一性,展开试验
那么对于是否重写hashcode和equals就会有下面四种情况发生
情况1:既没有重写hashcode也没有重写equals
我们知道S1和S2是2个对象