2016-06-15 17 views
-3

これでマップを反復処理する方法のコードです:Javaは順番

for(String key : mymap.stringPropertyNames()) { 
//mycode 
} 

これが正常に動作しますが、私は私がランダムな順序で必要な値を取得するに気づいた、使用してマップをループする方法があります特定の順序?

編集:Mymapは、propertiesオブジェクトです。

+3

'mymap'が何であるかに依存していること。 – Eran

+1

@Ciurga、どの地図を使用していますか?いくつかの論理的順序に基づいて内容を格納して反復するためにTreeMap inorderを使う必要があります –

+0

mymapは実際にはプロパティオブジェクトです – Ciurga

答えて

3

あなたはHashMap

のように並べ替えなしMapを使用しているので、これはこのクラスはマップの順序を保証しません[...]です。特に、注文がの一定時間()になると保証するものではありません。これに代えて


、あなたは次のようにいくつかの具体的な実装を使用することができます。

TreeMap

マップがそのキーの自然順序付けに従ってソートまたは提供されるComparatorによってれますどのコンストラクタが使用されているかに応じて、マップ作成時に

LinkedHashMapあなたはいないがを複製する必要がある場合

...

Hashテーブルと予測可能な繰り返し順序を持つMapインタフェースのリンクリストの実装です。

+1

okありがとう、私はコードを変更します – Ciurga

+0

@Ciurgaあなたがそれらをループする必要がある場合は、順序を維持し、代わりにリストを使用することを考慮してキーにアクセスする必要はありません。 –

+0

@Ciurgaこれはあなたの最初の質問です。**これまたは任意の回答があなたの質問を解決した場合は、[同意します](http://meta.stackexchange.com/q/5234/179419)**をクリックして**チェックマーク。これはあなたが解決策を見つけたことを広域コミュニティに示し、**回答者とあなた自身の両方にいくつかの評判を与えます**。これを行う義務はありません。 –

4

あなたは予測可能な繰り返し順序(挿入順番を)したいなら、あなたは要素をソートしたい場合は、TreeMapを使用する必要がLinkedHashMap

を使用し、この場合にはキーはComparableインタフェース

を実装する必要があります
0

キーの順序を変更する前に、キーの順序付けまたは並べ替えをサポートするもののいずれかにマップの実装を変更します。私はちょっと混乱していますが、普通はkeySetメソッドで地図のキーを取得します。私はstringPropertyNamesに慣れていないですが、それは地図である場合は(未テストコード)のような何かを行うことができるはず:

List keys = new ArrayList(mymap.keySet()) 
Collections.sort(keys) 
for (String key : keys) { 
    [...] 
}