IVR*_*ger 9 java set comparable
我有一个类"Accumulator",它实现了Comparable compareTo方法,我试图将这些对象放入HashSet中.
当我向HashSet添加()时,我在调试器中的compareTo方法中看不到任何活动,无论我在哪里设置断点.另外,当我完成add()时,我在Set中看到了几个重复项.
在这里,我搞砸了什么; 为什么不比较,因此允许欺骗?
谢谢,
IVR复仇者
Mic*_*rdt 17
我搞砸了什么,这里?
HashSet基于而hashCode()不是基于compareTo().你可能会混淆它TreeSet.在这两种情况下,请务必以equals()与其他方法一致的方式实施.
HashSet使用hashCode()和equals()方法来防止添加重复项.首先,它获取要添加的对象的哈希码.然后,它找到该哈希码的相应存储桶并遍历该存储桶中的每个对象,使用该equals()方法查看集合中是否已存在任何相同的对象.
您的调试器没有破坏,compareTo()因为它从未使用过HashSet!
规则是:
如果两个对象相等,则它们的哈希码 必须相等.
但是如果两个对象的哈希码相等,那么这并不意味着对象是相等的!可能是这两个对象碰巧具有相同的哈希值.