如何在将LinkedHashMap序列化为GWT AutoBean时保持顺序?

3

我尝试使用 MapHashMapLinkedHashMap 作为 AutoBean 工厂的类型,但在序列化后它总是会改变初始元素的顺序。

我不想发送额外的 ArrayList 来保存顺序数据。有没有办法强制 AutoBean 在 Map 中保持顺序?

2个回答

1

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

地图的顺序被定义为地图集合视图上的迭代器返回其元素的顺序。一些地图实现(如TreeMap类)对它们的顺序做出了特定的保证;而其他一些实现(如HashMap类)则没有。
GWT不会对基于Map的类进行任何更改。Map及其许多子类由于性能原因不保留插入顺序。LinkedHashMap通过设计保留其插入顺序。当然,这是假设您从LinkedHashMap开始而不是从另一种类型的Map构建它,该Map在插入期间可能实际上不保留其顺序,导致LinkedHashMap具有与您预期不同的顺序。
我想知道为什么您需要保留初始顺序,以及为什么要使用Map?

1
嗨,GWT没有重新排序我的LinkedHashMap。但是AutoBean在将map序列化为json时会进行重新排序。我使用它来存储从网格模型中获取的column_name = row_value对,并应作为Map <String,String>的列表导入到DynamicJasper xls报表工厂中。出于遗留原因,我不想改变这个结构。我目前的解决方法是将列顺序作为另一个List<String>传递。谢天谢地,AutoBean按正确的顺序序列化列表。 - denu

1

显然,在GWT 2.4中,LinkedHashMap.clone()返回一个HashMap,与纯Java的行为不同。AutoBean可能依赖于clone(),这最终会破坏顺序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接