У меня проблемы с использованием метода обновления scala.collection.immutable.HashMap. Я не вижу причины, по которой он возвращает карту вместо HashMap. Как получить новый HashMap с добавленной новой парой ключ-значение?
Почему неизменяемые методы HashMap в Scala возвращают карту?
Ответы (3)
Это ожидаемое поведение. HashMap
наиболее полезен как конкретная реализация Map
, включающая использование хеш-таблицы для поиска.
Обычно вы говорите var values: Map[String, Any] = new HashMap
, а затем бездельничаете и используете его, как если бы это был обычный неизменяемый Map
.
Есть ли у вас причина, чтобы ваш код знал, что это HashMap после того, как вы new
выполнили его, как указано выше?
Если вы используете 2.7, это связано с тем, что со временем библиотека коллекций стала несовместимой с различными классами реализации, не специализирующимися на возвращаемых типах некоторых методов. Это одна из вещей, которая исправлена в редизайне библиотеки коллекций для версии 2.8.
Если вы используете 2.8, это связано с тем, что метод update
устарел, и вместо него следует использовать updated
. Это правильно специализируется на возвращаемом значении.
scala> HashMap(1->1, 2->2, 3->3, 4->4).updated(1,3)
res4: scala.collection.immutable.HashMap[Int,Int] = Map((2,2), (4,4), (1,3), (3,3))
В версии 2.7.x он возвращает Map
, потому что это может быть ListMap
или TreeMap
или что-то еще, и каждый раз переопределять методы считалось слишком трудоемким.
В версии 2.8.x он должен возвращать HashMap
, но вы должны использовать updated
(update
устарело).