import java.util.concurrent._
import collection.JavaConverters._
import collection.mutable.HashMap
import com.hazelcast.client.HazelcastClient
import com.hazelcast.core.{MultiMap,IMap}
//calculate the execution time
def time[A](a: => A) = {
val now = System.nanoTime
val result = a
val micros = (System.nanoTime - now) / 1000
println("%d microseconds".format(micros))
result
}
val instance = HazelcastClient.newHazelcastClient()
//hazelcast IMap or MultiMap
val hm: MultiMap[String,String] = instance.getMultiMap("testForPerformance")
time(Range(0,1000000).foreach(x=>hm.put("test",x.toString)))
time(Range(0,1000000).foreach(x=>hm.put(x.toString,"test")))
println(hm.keySet.asScala.toSeq.length)
println(hm.values.size)
//scala HashMap
val sm = new HashMap[String,String]
time(Range(0,1000000).foreach(x=>sm.put("test",x.toString)))
time(Range(0,1000000).foreach(x=>sm.put(x.toString,"test")))
println(sm.keySet.toSeq.length)
println(sm.values.size)
//scala ConcurrentMap
val cm = new ConcurrentHashMap[String, String]
val cmm = cm.asScala
time(Range(0,1000000).foreach(x=>cmm.put("test",x.toString)))
time(Range(0,1000000).foreach(x=>cmm.put(x.toString,"test")))
println(cmm.keySet.toSeq.length)
println(cmm.values.size)