0

我在我的界面中使用以下代码,一旦结果显示在浏览器上,值的顺序就会改变。如何解决问题?

   public static final Map<String,String> BED = new HashMap<String,String>(){
        {
            put("A","Any");
            put("0","Studio");
            put("1","1 or more");
            put("2","2 or more");
            put("4","4 or more");


    };
    };


<s:select name="BED" label="Bedrooms" list="@interfaces.Items@BED"/>

在浏览器中的顺序如下

 1 or more
 Studio
 Any 
 4 or more
4

2 回答 2

2

Hashmap 不是有序集合。

因此,如果您根据用例更改为 TreeMap 或 LinkedHashMap ,那么您将按顺序获得结果。

来自Java 教程

Java 平台包含三个通用 Map 实现:HashMap、TreeMap 和 LinkedHashMap。它们的行为和性能与 HashSet、TreeSet 和 LinkedHashSet 非常相似,如Set Interface 部分所述

设置接口部分:

Java 平台包含三个通用的 Set 实现:HashSet、TreeSet 和 LinkedHashSet。HashSet 将其元素存储在哈希表中,是性能最好的实现;但是它不保证迭代的顺序。TreeSet 将其元素存储在红黑树中,根据元素的值对其元素进行排序;它比 HashSet 慢得多。LinkedHashSet 被实现为一个带有链表的哈希表,它根据元素插入集合的顺序(插入顺序)对其元素进行排序。LinkedHashSet 将其客户从 HashSet 提供的未指定的、通常混乱的排序中解放出来,其成本仅略高一些。

于 2013-05-20T06:02:17.513 回答
2

改用LinkedHashMapa

public static final Map<String,String> BED = new LinkedHashMap<String,String>();

参考
http ://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html

此实现与 HashMap 的不同之处在于它维护一个双向链表,该列表贯穿其所有条目。这个链表定义了迭代顺序,通常是键插入映射的顺序(插入顺序)。

于 2013-05-20T06:05:37.850 回答