首页 > 解决方案 > Scala HashMap#contains 没有任何期望

问题描述

我正在尝试使用如下所示的 Scala HashMap,当我尝试对 HashMap 进行操作时,出现类型不匹配。除了使用Java HashMap,我怎么写这个?

import scala.collection.mutable._

object Solution {

  def twoSum(nums: Array[Int], target: Int): Array[Int] = {
    var lookupTable = new HashMap()

    for(i <- nums.indices) {
      if (lookupTable.contains(target - nums(i)))
        return Array(lookupTable(i), i)
      lookupTable.put(nums(i), i)
    }

    throw new Exception
  }
}

标签: scala

解决方案


在没有类型归属的情况下,空HashMap是 a HashMap[Nothing, Nothing],因为可变的 HashMap 是不变的,这意味着您拥有一个无法放入任何内容或从中取出任何内容的集合。

因此,有两种方法可以解决此问题:

您可以使用可变的HashMap[Int, Int]

val lookupTable = HashMap[Int, Int]()

或者,您可以使用 immutable HashMap,它在值类型中是协变的,并且在键类型中技术上不变,但是有一种解决方法:

var lookupTable = scala.collection.immutable.HashMap()

for (i <- nums.indices) {
  if (lookupTable.contains(target - nums(i))) return Array(lookupTable(i), i)
  else lookupTable = lookupTable ++ Seq((nums(i), i))
}

推荐阅读