Scala compiler generates many methods including hashCode() method for case Class
scala> // Regular Class example scala> import scala.collection.mutable.HashMap import scala.collection.mutable.HashMap scala> class RegularClass(var1: Int, va2: String) defined class RegularClass scala> val obj1 = new RegularClass(1, "one") obj1: RegularClass = $iwC$$iwC$RegularClass@dbdbeb5 scala> obj1.hashCode() res41: Int = 230538933 scala> val obj2 = new RegularClass(1, "one") obj2: RegularClass = $iwC$$iwC$RegularClass@1421c757 scala> obj2.hashCode() res42: Int = 337758039 scala> val myMap = new HashMap[RegularClass, String] myMap: scala.collection.mutable.HashMap[RegularClass,String] = Map() scala> val m1 = myMap + (obj1 -> "firstobject") m1: scala.collection.mutable.Map[RegularClass,String] = Map($iwC$$iwC$RegularClass@dbdbeb5 -> firstobject) scala> val m2 = m1 + (obj2 -> "secondobject") m2: scala.collection.mutable.Map[RegularClass,String] = Map($iwC$$iwC$RegularClass@dbdbeb5 -> firstobject, $iwC$$iwC$RegularClass@1421c757 -> secondobject) scala> | // case Class example scala> import scala.collection.mutable.HashMap import scala.collection.mutable.HashMap scala> case class MyCaseClass(var1: Int, va2: String) defined class MyCaseClass scala> val obj1 = new MyCaseClass(1, "one") obj1: MyCaseClass = MyCaseClass(1,one) scala> obj1.hashCode() res44: Int = 1311424316 scala> val obj2 = new MyCaseClass(1, "one") obj2: MyCaseClass = MyCaseClass(1,one) scala> obj1.hashCode() res45: Int = 1311424316 scala> val myMap = new HashMap[MyCaseClass, String] myMap: scala.collection.mutable.HashMap[MyCaseClass,String] = Map() scala> val m1 = myMap + (obj1 -> "firstobject") m1: scala.collection.mutable.Map[MyCaseClass,String] = Map(MyCaseClass(1,one) -> firstobject) scala> //Because both obj1 & obj2 are considered to be the same scala> // key ; obj1 is overwritten by obj2 scala> val m2 = m1 + (obj2 -> "secondobject") m2: scala.collection.mutable.Map[MyCaseClass,String] = Map(MyCaseClass(1,one) -> secondobject)
No comments:
Post a Comment