jsi*_*ght 3 java collections jython hashset
我有以下代码:
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)
Run Code Online (Sandbox Code Playgroud)
输出为:1 1现在使用HashSet:1 1 0
但是,我原本期望最后一行也是真的(1).是否有一些我不知道的明显事物.
(是的,我知道我的equals方法和hashcode方法没有考虑到一些问题...它们是故意简单的,但如果问题导致这个问题,请告诉我)
dme*_*ter 10
您不应该实现Java样式的equals和hashCode方法,而是实现Python等效项__eq__
和__hash__
.添加
def __hash__(self):
return self.hashCode()
def __eq__(self, o):
return self.equals(o)
Run Code Online (Sandbox Code Playgroud)
帮助.这些python方法 - 据我所知 - 通过Jython动态绑定到hashCode和equals().这确保您可以将Python类放入Java的集合中.
现在代码打印五个"1".
归档时间: |
|
查看次数: |
4502 次 |
最近记录: |