Scala LinkedHashMap.toMap сохраняет порядок? - PullRequest
4 голосов
/ 01 июня 2011

Как гласит заголовок, сохраняет ли преобразование LinkedHashMap в карту порядок, в котором хранятся элементы?

Я не верю, но не смог найти никаких доказательств.

В качестве альтернативы,есть ли реализация неизменяемой карты в Scala, которая сохраняет порядок вставки элементов?

Ответы [ 3 ]

9 голосов
/ 01 июня 2011

Общий интерфейс Map не дает такой гарантии заказа. И не может, поскольку это исключило бы HashMap в качестве возможной реализации.

Я полагаю, collection.immutable.ListMap сохраняет порядок вставки, вы также можете использовать LinkedHashMap через интерфейс Map, что затем предотвратит доступ к любым методам мутатора. Это достаточно просто сделать, явно указав тип:

val m: scala.collection.Map[Int,Int] = collection.mutable.LinkedHashMap(1->2, 2->3)

или (используя типовое обозначение):

val m = collection.mutable.LinkedHashMap(1->2, 2->3) : Map[Int,Int]
5 голосов
/ 12 сентября 2014

Нет, LinkedHashMap.toMap не сохраняет порядок вставки.

Лучший из известных мне способов - преобразовать его в ListMap (неизменяемый):

def toMap[A, B](lhm: mutable.LinkedHashMap[A, B]): ListMap[A, B] = ListMap(lhm.toSeq: _*)

Простое скрытие методов мутацииэто не то же самое, что преобразование в неизменный объект.

0 голосов
/ 01 июня 2011

Вы можете использовать TreeMap :

TreeMap(Map(1 -> "one", 2 -> "two", 3 -> "three").toArray:_*).map(println)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...