java - 在 Scala 中使用对象的地址作为 Map 键

标签 java scala

我已经定义了一个 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/

相关文章:

scala - 如果不在导入语句中使用根包,IntelliJ 11 无法解析 Play/Scala 模型

ScalaTest - 如何检查序列的所有项目是否与谓词匹配?

java - 需要转义的所有可能的 linux 路径字符是什么

java - 简单的 Netty Echo 服务器/客户端不接收消息

java - 等待 Firestore 查询完成

scala - 如何旋转 Spark 数据框表?

scala - 有没有办法为 IntelliJ IDEA 的评论启用 Visual-Assist 风格的工具提示?

java - 此标记后应有 VariableDeclaratorId

java - 冲突的 jar 方法

java - 如何从文本文件的一行中删除两个字符之间的空格