Почему неизменяемые методы HashMap в Scala возвращают карту?

У меня проблемы с использованием метода обновления scala.collection.immutable.HashMap. Я не вижу причины, по которой он возвращает карту вместо HashMap. Как получить новый HashMap с добавленной новой парой ключ-значение?


person pau.estalella    schedule 11.04.2010    source источник


Ответы (3)


Это ожидаемое поведение. HashMap наиболее полезен как конкретная реализация Map, включающая использование хеш-таблицы для поиска.

Обычно вы говорите var values: Map[String, Any] = new HashMap, а затем бездельничаете и используете его, как если бы это был обычный неизменяемый Map.

Есть ли у вас причина, чтобы ваш код знал, что это HashMap после того, как вы new выполнили его, как указано выше?

person sblom    schedule 11.04.2010

Если вы используете 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))
person Ben Lings    schedule 11.04.2010

В версии 2.7.x он возвращает Map, потому что это может быть ListMap или TreeMap или что-то еще, и каждый раз переопределять методы считалось слишком трудоемким.

В версии 2.8.x он должен возвращать HashMap, но вы должны использовать updated (update устарело).

person Rex Kerr    schedule 11.04.2010