当前位置:  开发笔记 > 编程语言 > 正文

HashSet问题 - equals和hashCode包含的工作方式与我预期的不同

如何解决《HashSet问题-equals和hashCode包含的工作方式与我预期的不同》经验,为你挑选了1个好方法。

我有以下代码:

class IncidentTag:
     def __init__(self,tag):
        self.tag = tag
     def equals(self,obj):
        return self.tag.equals(obj.tag)
     def hashCode(self):
        return self.tag.hashCode()

from java.lang import String
from java.util import HashMap
from java.util import HashSet

tag1 = IncidentTag(String("email"))
tag1copy = IncidentTag(String("email"))
tag2 = IncidentTag(String("notemail"))

print tag1.equals(tag1copy)
print tag2.equals(tag2)

print "Now with HashSet:"

hSet = HashSet()
hSet.add(tag1)
hSet.add(tag2)

print hSet.contains(tag1)
print hSet.contains(tag2)
print hSet.contains(tag1copy)

输出为:1 1现在使用HashSet:1 1 0

但是,我原本期望最后一行也是真的(1).是否有一些我不知道的明显事物.

(是的,我知道我的equals方法和hashcode方法没有考虑到一些问题...它们是故意简单的,但如果问题导致这个问题,请告诉我)



1> dmeister..:

您不应该实现Java样式的equals和hashCode方法,而是实现Python等效项__eq____hash__.添加

def __hash__(self):
    return self.hashCode()
def __eq__(self, o):
    return self.equals(o)

帮助.这些python方法 - 据我所知 - 通过Jython动态绑定到hashCode和equals().这确保您可以将Python类放入Java的集合中.

现在代码打印五个"1".

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有