我已经定义了一个Map来存储我树的节点的一些Int值。 Node类定义为:
case class Node(value: Int, var left: Node = null, var right: Node)
和地图
private val hMap = new mutable.HashMap[Node, Int]()
当我打印此地图时,我得到以下内容:
Map(Node(8,null,null) -> 1, Node(11,null,null) -> 1, Node(2,Node(3,null,null),Node(4,Node(5,null,Node(6,null,null)),null)) -> 4)
我希望看到我在Map中存储的Node对象的引用(或地址)。我的假设是否仍然有效,打印方法是在打印时序列化对象。如果不是这样,那么我该如何创建一个类型的Map(referenceTo(Node) - >某个int值)。
答案 0 :(得分:1)
尝试覆盖hashcode,并等于基于引用。您可以使用scala eq
运算符根据相等检查内的引用来匹配对象。
def main(args: Array[String]): Unit = {
val hMap = new mutable.HashMap[Node,Int]()
val n1 = Node(1,null,null)
val n3=new Node(3,null,null)
val n2=new Node(2,n1,n3)
hMap.put(n1,1)
hMap.put(n2,2)
hMap.put(n3,3)
hMap foreach( println)
println(hMap get new Node(1,null,null))
}
case class Node(value: Int, var left: Node = null, var right: Node) {
override def equals(obj: scala.Any): Boolean = {
if (obj.isInstanceOf[Node]) {
val tmp = obj.asInstanceOf[Node]
(tmp.value == this.value)
// add more conditions for equality
}else false
}
override def hashCode(): Int = {
this.value
}
}