如何在序列化到GET AutoBean时保留LinkedHashMap的顺序?

时间:2011-12-05 09:55:38

标签: java gwt linkedhashmap autobean insertion-order

我尝试使用MapHashMapLinkedHashMap作为AutoBean工厂的类型,并且在序列化后始终更改初始元素顺序。

我不想发送包含订单数据的其他ArrayList。有没有办法强制AutoBean在Map

中保持顺序

2 个答案:

答案 0 :(得分:1)

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

  

映射的顺序被定义为迭代器所在的顺序   地图的集合视图返回其元素。一些地图   实现,如TreeMap类,作为特定的保证   他们的订单;其他人,比如HashMap类,不会。

GWT不会对基于Map的类进行任何更改。由于性能原因,Map及其许多子类不保持插入顺序。 LinkedHashMap,按照设计, 保持其插入顺序。也就是说,当然,假设您使用LinkedHashMap开始而不是从其他类型的Map构建它,这可能在插入过程中实际上不保留其顺序,从而导致LinkedHashMap订单的顺序与您期望的顺序不同。

我想知道为什么你需要保留初始订单,为什么你使用Map如果这是你想要的?

答案 1 :(得分:1)

显然,至少在GWT 2.4中,GWT中的LinkedHashMap.clone()返回HashMap,与纯Java行为相反。 AutoBean可能依赖于clone(),最终会破坏顺序。