Advertisement
Guest User

Map - get or contains

a guest
Sep 2nd, 2015
422
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.76 KB | None | 0 0
  1. import scala.collection.mutable
  2.  
  3. object HashTest {
  4.  
  5.   val imax = 10000
  6.  
  7.   def generateMap(imax: Int): mutable.HashMap[Int, String] = {
  8.     val ret = scala.collection.mutable.HashMap.empty[Int, String]
  9.     for (i <- 1 to imax) {
  10.       ret.put(i * 2, (i * 2).toString)
  11.     }
  12.     ret
  13.   }
  14.  
  15.   def test1(imax: Int)(map: mutable.HashMap[Int, String]): List[String] = {
  16.     var ret = List[String]()
  17.     for (i <- 1 to (imax * 2)) {
  18.       if (map.contains(i)) {
  19.         ret ::= map(i)
  20.       } else {
  21.         ret ::= ""
  22.       }
  23.     }
  24.     ret
  25.   }
  26.  
  27.   def test2(imax: Int)(map: mutable.HashMap[Int, String]): List[String] = {
  28.     var ret = List[String]()
  29.     for (i <- 1 to (imax * 2)) {
  30.       map.get(i) match {
  31.         case Some(in) => ret ::= in
  32.         case None => ret ::= ""
  33.       }
  34.     }
  35.     ret
  36.   }
  37.  
  38.   def main(args: Array[String]) {
  39.     for (i <- 1 to 7) {
  40.  
  41.       val k = Math.pow(10, i).toInt
  42.       println(k + " sample in a map")
  43.       var avrT1 = 0.0
  44.       var avrT2 = 0.0
  45.       for (j <- 1 to 1000) {
  46.         val map = generateMap(k)
  47.         val (_, t1) = time("contains") {
  48.           test1(k)(map)
  49.         }
  50.         val (_, t2) = time("option") {
  51.           test2(k)(map)
  52.         }
  53.         avrT1 += (t1 / 1000.0)
  54.         avrT2 += (t2 / 1000.0)
  55.       }
  56.       println("  contains avr: " + avrT1 + " ns")
  57.       println("  get avr:      " + avrT2 + " ns")
  58.       println((if (avrT1 < avrT2) "contains" else "get") + " is faster with " + Math.abs(avrT1 - avrT2) + " ns")
  59.       println()
  60.     }
  61.   }
  62.  
  63.   def time[R](name: String)(block: => R): (R, Long) = {
  64.     val t0 = System.nanoTime()
  65.     val result = block // call-by-name
  66.     val t1 = System.nanoTime()
  67.     //println(name + "Elapsed time: " + (t1 - t0) + "ns")
  68.     (result, (t1 - t0))
  69.   }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement