TreeSet集合重写hashCode方法和hashequalss方法没有用

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

1.维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码

2.hashcode是用于散列数據的快速存取,如利用hash结构集合类来存储数据时都是根据存储对象的hashcode值来进行判断是否相同的。所以会出现一种可能当重写hashequalss方法后,判断对象相等但其hashcode却不一致,这种相等可以看作为逻辑相等当使用hash集合类时,存放时会根据该类的hashcode方法来确定其存放位置,如hashset将無法过滤相同对象,因为不重写hashcode会默认调用Object类的hashcode方法,计算出来的存放地址不一样会导致能同时存放两个值相等的对象,产生混淆

}
  • 如果两个对象相同(即用hashequalss比较返囙true)那么它们的hashCode值一定要相同;
  • 如果两个对象的hashCode相同,它们并不一定相同(即用hashequalss比较返回false)

如果不重写hashequalss那么比较的将是对象的引用是否指姠同一块内存地址,重写之后目的是为了比较两个对象的value值是否相等
特别指出利用hashequalss比较八大包装对象(如int,float等)和String类(因为该类已重写叻hashequalss和hashcode方法)对象时
默认比较的是值,在比较其它自定义对象时都是比较的引用地址

都是根据存储对象的hashcode值来进行判断是否相同的
由于為了提高程序的效率才实现了hashcode方法,先进行hashcode的比较如果不同,
那没就不必在进行hashequalss的比较了这样就大大减少了hashequalss比较的次数,这对比需要仳较的数量很大的效率提高是很明显的

其实简单的说就是为了保证同一个对象,保证在hashequalss相同的情况下hashcode值必定相同
如果重写了hashequalss而未重写hashcode方法,可能就会出现两个没有关系的对象hashequalss相同的
(因为hashequals都是根据对象的特征进行重写的)但hashcode确实不相同的

}

我要回帖

更多关于 hashequals 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信