Учитывая следующий код:
def timed[T](fn: => T): (T, Long) = {
val startTime = System.currentTimeMillis()
val result = fn
val endTime = System.currentTimeMillis()
(result, endTime - startTime)
}
val t1 = timed((0 until Int.MaxValue).hashCode())
val t2 = timed((0, Int.MaxValue).hashCode())
print(t1 + " : " + t2)
Теоретически скорость hashCode () диапазона может быть сделана сопоставимой с кортежем, вместо этого разница в скорости ошеломляет:
(201341306,5274) : (-281813831,0)
Оказывается, Range наследует реализацию IndexSeq hashCode (), которая требует полной итерации.У меня вопрос, можно ли сделать это быстрее?Что мешает его внедрению?