Как сохранить порядок LinkedHashMap при сериализации в GWT AutoBean?

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

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

2 ответа

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

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

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

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

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

Другие вопросы по тегам