Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import scala.collection.mutable
- object HashTest {
- val imax = 10000
- def generateMap(imax: Int): mutable.HashMap[Int, String] = {
- val ret = scala.collection.mutable.HashMap.empty[Int, String]
- for (i <- 1 to imax) {
- ret.put(i * 2, (i * 2).toString)
- }
- ret
- }
- def test1(imax: Int)(map: mutable.HashMap[Int, String]): List[String] = {
- var ret = List[String]()
- for (i <- 1 to (imax * 2)) {
- if (map.contains(i)) {
- ret ::= map(i)
- } else {
- ret ::= ""
- }
- }
- ret
- }
- def test2(imax: Int)(map: mutable.HashMap[Int, String]): List[String] = {
- var ret = List[String]()
- for (i <- 1 to (imax * 2)) {
- map.get(i) match {
- case Some(in) => ret ::= in
- case None => ret ::= ""
- }
- }
- ret
- }
- def main(args: Array[String]) {
- for (i <- 1 to 7) {
- val k = Math.pow(10, i).toInt
- println(k + " sample in a map")
- var avrT1 = 0.0
- var avrT2 = 0.0
- for (j <- 1 to 1000) {
- val map = generateMap(k)
- val (_, t1) = time("contains") {
- test1(k)(map)
- }
- val (_, t2) = time("option") {
- test2(k)(map)
- }
- avrT1 += (t1 / 1000.0)
- avrT2 += (t2 / 1000.0)
- }
- println(" contains avr: " + avrT1 + " ns")
- println(" get avr: " + avrT2 + " ns")
- println((if (avrT1 < avrT2) "contains" else "get") + " is faster with " + Math.abs(avrT1 - avrT2) + " ns")
- println()
- }
- }
- def time[R](name: String)(block: => R): (R, Long) = {
- val t0 = System.nanoTime()
- val result = block // call-by-name
- val t1 = System.nanoTime()
- //println(name + "Elapsed time: " + (t1 - t0) + "ns")
- (result, (t1 - t0))
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement