我正在从一个文件中读到这样的地图......
def inputFile = new File("/Users/joe/Desktop/teamManagers.txt");
def teams = [:]
inputFile.eachLine { rawLine ->
def line = rawLine.split('\t')
String team = line[0].toString()
def manager = line[1]
teams.put(team, manager)
println ("${team} has hash code ${team.hashCode()}")
}
我在地图中提出的一个值是" Yankees"。所以最后一行打印出来
"Yankees" has hash code -1687935690
但是现在如果我想检查这个String是否在Map中,它似乎有一个不同的哈希码。例如,此代码..
println "Yankees".hashCode();
打印出265351886.正如您所看到的,这与从文件中拉出时相同String的哈希码不同。
为什么这样做?难道两个相等的字符串不应该具有相同的哈希码吗?
如何检查给定字符串是否在Map中?
答案 0 :(得分:1)
显然,你的文件中有洋基队的引号(也见于你的输出中)
对我来说,这段代码:
def team ='"Yankees"'
println ("${team} has hash code ${team.hashCode()}")
println "Yankees".hashCode()
给出了这个输出:
"Yankees" has hash code -1687935690
265351886
这与您的结果一致。
然而
def team ='"Yankees"'
println ("${team} has hash code ${team.hashCode()}")
println '"Yankees"'.hashCode()
给出相同的哈希值。那么你的问题就是
编辑:
你还问过如何判断一个键是否在地图中。例如,你可以if(map["Im a key!"])
。