Как сохранить порядок 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
если это то, что вы хотите?