我已经定义了一个 Map 来存储一些针对我的树的节点的 Int 值。 Node 类定义为:
case class Node(value: Int, var left: Node = null, var right: Node)
和 map
private val hMap = new mutable.HashMap[Node, Int]()
当我打印这张 map 时,我得到以下信息:
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 对象的引用(或地址)。我的假设仍然有效吗?打印方法在打印时序列化对象。如果这不是真的,那么我如何创建类型为(referenceTo(Node) -> some int value)的Map。
最佳答案
尝试覆盖 hashcode 和 equals 以基于引用。您可以使用 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
}
}
关于java - 在 Scala 中使用对象的地址作为 Map 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42016053/