Skip to content

Instantly share code, notes, and snippets.

@OndrejSpanel
Created February 6, 2016 21:40
Show Gist options
  • Save OndrejSpanel/0a8767f0e083875d0989 to your computer and use it in GitHub Desktop.
Save OndrejSpanel/0a8767f0e083875d0989 to your computer and use it in GitHub Desktop.
Test builder vs. update performance for HashMap
object HashTest extends App {
import scala.collection.generic.CanBuildFrom
import scala.collection.immutable.HashMap
type HM = HashMap[Int, String]
def updated(map: HM, key: Int, value: String) = {
map.updated(key, value)
}
def builder(m: HM, key: Int, value: String)(implicit cbf: CanBuildFrom[HM, (Int, String), HM]) = {
val builder = cbf(m)
m.foreach { case (k, v) => k -> (if (k == key) value else v)}
builder.result
}
val map = HashMap((0 to 10000).map(p => p -> p.toString): _*)
def now = System.currentTimeMillis
for (rep <- 0 to 10) {
{
val time = now
for (i <- 0 to 10000) {
updated(map, 500, "xxx")
}
println(s"Update ${now - time}")
}
{
val time = now
for (i <- 0 to 10000) {
builder(map, 500, "xxx")
}
println(s"Builder ${now - time}")
}
}
}
@OndrejSpanel
Copy link
Author

Output on my system is:

Update 14
Builder 1924
Update 24
Builder 1758
Update 2
Builder 1729
Update 1
...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment