0

で追加効果を得ようとしましConcurrentHashMap<String,String>たが、要素の順序が混在しています。のようなコード...

ConcurrentHashMap<String,String>h=new ConcurrentHashMap<String,String>();

        for(int i=0; i<10; i++)
        {           
            h.put(""+Math.random(), ""+i);

        }

        Iterator<String> iterator=h.values().iterator();
        while(iterator.hasNext())
        {
            System.out.println(iterator.next());
        }

...コンソールに次の値を与えます:

9
4
6
2
0
5
1
7
3
8

...だから私の質問は...

キーがランダムな文字列である場合、ConcurrentHashMapが元の要素の順序を取得する方法はありますか?

ありがとう

4

2 に答える 2

11

代わりに使用LinkedHashMapすると、挿入の順序が保持されます

予測可能な反復順序を使用した、マップインターフェイスのハッシュテーブルとリンクリストの実装。

そして使用する

Collections.synchronizedMap(mapInstance)

見るCollections.synchronizedMap(mapINstance);

 Map<K,V> map = Collections.synchronizedMap(new LinkedHashMap());
于 2012-10-11T18:27:56.347 に答える
1

LinkedHashMapは、挿入の順序を維持します。

予測可能な反復順序を使用した、マップインターフェイスのハッシュテーブルとリンクリストの実装。この実装は、すべてのエントリを介して実行される二重リンクリストを維持するという点でHashMapとは異なります。このリンクリストは、反復順序を定義します。これは通常、キーがマップに挿入された順序(挿入順序)です。キーがマップに再挿入されても、挿入順序は影響を受けないことに注意してください。

于 2012-10-11T18:28:38.577 に答える