scala map += оператор с пятью парами
У меня проблема с добавлением пар на существующую карту. Как только я достигаю пятой пары карты, карта перестраивается. Порядок правильный с 4 парами, но как только 5-й добавляется, он сдвигается сам. См. Пример ниже (при условии, что я построил карту из 4 пар по одной паре за раз):
scala> val a = Map("a1" -> 1, "a2" -> 1, "a3" -> 1, "a4" -> 1)
a: scala.collection.immutable.Map[String,Int] = Map(a1 -> 1, a2 -> 1, a3 -> 1, a4 -> 1)
scala> a += ("a5" -> 1)
scala> a
res26: scala.collection.immutable.Map[String,Int] = Map(a5 -> 1, a4 -> 1, a3 -> 1, a1 -> 1, a2 -> 1)
Добавленный пятый элемент прыгнул в начало Карты и сдвинул остальные вокруг. Есть ли способ сохранить элементы в порядке (1, 2, 3, 4, 5)?
Спасибо
1 ответ
По умолчанию Scala's immutable.Map
использования HashMap
,
От http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html:
Этот класс не дает никаких гарантий относительно порядка карты; в частности, это не гарантирует, что заказ останется постоянным с течением времени
Таким образом, карта на самом деле не является таблицей, которая содержит "a1" -> 1
, но таблица, которая содержит hash("a1") -> 1
, Карта переупорядочивает свои ключи на основе хеша ключа, а не ключа, который вы в него вставили.
Как было рекомендовано в комментариях, используйте LinkedHashMap
или же ListMap
: Реализация Scala Map сохраняет записи в порядке вставки?
PS: Вам может быть интересно прочитать эту статью: http://howtodoinjava.com/2012/10/09/how-hashmap-works-in-java/