Groovy:为什么相等的GPathResult实例生成不同的哈希代码?

Groovy:为什么相等的GPathResult实例生成不同的哈希代码?,groovy,hashcode,xmlslurper,Groovy,Hashcode,Xmlslurper,我在尝试向集合中添加一些XmlSlurper元素,并确保不会添加两次与另一个解析相同文本的slurper def CAR_记录=“” 澳大利亚 速度为271公里/小时的生产皮卡车 马恩岛 最小的街道合法车辆,99厘米宽,59公斤重 法国 价值1500万美元的最有价值汽车 ''' def records=new XmlSlurper().parseText(CAR_记录) def same_records=new XmlSlurper().parseText(CAR_records) //明显相等

我在尝试向集合中添加一些
XmlSlurper
元素,并确保不会添加两次与另一个解析相同文本的slurper

def CAR_记录=“”
澳大利亚
速度为271公里/小时的生产皮卡车
马恩岛
最小的街道合法车辆,99厘米宽,59公斤重
法国
价值1500万美元的最有价值汽车
'''
def records=new XmlSlurper().parseText(CAR_记录)
def same_records=new XmlSlurper().parseText(CAR_records)
//明显相等
断言记录==相同的\u记录
def slurpers=new HashSet()
slurpers.add(记录)
slurpers.add(相同的\u记录)
//为什么这里有两个条目?
断言slurpers.size()==1
我错过什么了吗?两个相等的对象不应该生成相同的哈希代码吗


使用
XmlSlurper
作为键的映射也会发生同样的情况。

看起来像
GPathResult
覆盖
equals
方法,但使用
对象中的默认
hashCode
。这就是为什么记录和相同的_记录用不同的哈希代码相等的原因


您希望它扫描整个XML解析树以生成哈希代码吗?我很惊讶,当你这样说的时候,平等性比较会返回真正的tbhwell,呵呵。当我尝试这一点时,我的第一个想法是平等不会起作用,但当它起作用时,我认为它必须起作用。是的,平等只是将添加公共int hashCode(){return getText().hashCode()}的文本与XmlSlurper应该起作用的文本进行比较