Как сохранить порядок LinkedHashMap при сериализации в GWT AutoBean? - PullRequest
3 голосов
/ 05 декабря 2011

Я пытался использовать Map, HashMap и LinkedHashMap в качестве типа для фабрики AutoBean и всегда после сериализации изменял начальный порядок элементов.

Я не хочу отправлять дополнительные ArrayList, который будет содержать данные заказа.Есть ли способ заставить AutoBean поддерживать порядок в Map?

Ответы [ 2 ]

1 голос
/ 19 января 2012

Очевидно, и, по крайней мере, в GWT 2.4, LinkedHashMap.clone() в GWT возвращает HashMap, в отличие от поведения чистой Java.AutoBean, вероятно, полагается на clone (), который в итоге портит порядок.

1 голос
/ 05 декабря 2011

http://docs.oracle.com/javase/6/docs/api/java/util/Map.html

Порядок карты определяется как порядок, в котором итераторы в представлениях коллекции карты возвращают свои элементы.Некоторые реализации карт, такие как класс TreeMap, дают определенные гарантии относительно их порядка;другие, например класс HashMap, этого не делают.

GWT не вносит изменений в классы на основе Map.Map и многие его подклассы не сохраняют порядок вставки по соображениям производительности.LinkedHashMap, по замыслу, сохраняет свой порядок вставки.То есть, конечно, предполагая, что вы начинаете с LinkedHashMap и не создаете его из другого типа Map, который может фактически не сохранять свой порядок во время вставки, в результате чего LinkedHashMapу меня другой заказ, чем вы ожидаете.

Мне интересно, почему вы все равно должны сохранять первоначальный заказ, и почему вы используете Map, если вы этого хотите?

...