我刚刚在 Scala Set API 中遇到了一个奇怪的行为。这是我的功能,去掉了与项目其余部分相关的内容
def grade(...): Double = {
val setA: HashSet = // get from somewhere else
val setB: HashSet = // get from somewhere else
if ((setA size) == 0 || (setB size) == 0) return 0
else return (setA & setB size) / (setA | set B size)
}
这个函数在一个循环中被调用了很多时间,整个循环在大约 4.5 秒内执行。但是当用大小的总和(粗略近似)替换联合的大小时,为了测试联合操作的影响,执行时间减少到大约 0.35 秒......
def grade(...): Double = {
val setA: HashSet = // get from somewhere else
val setB: HashSet = // get from somewhere else
if ((setA size) == 0 || (setB size) == 0) return 0
else return (setA & setB size) / (setA size + set B size)
}