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 プラットフォームには、HashMap、TreeMap、および LinkedHashMap の 3 つの汎用 Map 実装が含まれています。これらの動作とパフォーマンスは、セット インターフェイス セクションで説明されているように、HashSet、TreeSet、および LinkedHashSet とまったく同じです。

インターフェイス セクションを設定します。

Java プラットフォームには、HashSet、TreeSet、および LinkedHashSet という 3 つの汎用 Set 実装が含まれています。要素をハッシュ テーブルに格納する HashSet は、最もパフォーマンスの高い実装です。ただし、反復の順序に関する保証はありません。要素を赤黒ツリーに格納する TreeSet は、値に基づいて要素を並べ替えます。HashSet よりも大幅に低速です。リンクされたリストが実行されるハッシュ テーブルとして実装される LinkedHashSet は、要素がセットに挿入された順序 (挿入順序) に基づいて要素を並べ替えます。LinkedHashSet は、わずかに高いコストで、HashSet によって提供される不特定の一般的に無秩序な順序付けからクライアントを解放します。

于 2013-05-20T06:02:17.513 に答える
2

代わりLinkedHashMap

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 に答える