2012-02-26 5 views
0

以下に示すように、私はハッシュマップを作成したを使用してHashMapを作成:既存のハッシュマップ

Map<String, String> streetno = new HashMap<String, String>(); 

streetno.put("3", "Sachin"); 
streetno.put("2", "Dravid"); 
streetno.put("1", "Sehwag"); 
streetno.put("5", "Laxman"); 
streetno.put("4", "Kohli"); 

今、私は上記のハッシュマップのキーは、以下のように値と値がキーになりますとなり、新たなハッシュマップを作成したいです

Map<String, String> streetname = new HashMap<String, String>(); 

streetname.put("Sachin", "3"); 
streetname.put("Dravid", "2"); 
streetname.put("Sehwag", "1"); 
streetname.put("Laxman", "5"); 
streetname.put("Kohli", "4"); 

私はそれを行う方法がわからない...誰もこれで私を助けることができる...ここ

+1

Googleのコレクションapiであるguavaは、これを行うための 'inverse()'操作をサポートするBiMapという概念をサポートしています。これはデータのコピーを作成せずに行うのが便利です。 APIの詳細については、[ここ](http://docs.guava-libraries.googlecode.com/git-history/v11.0.1/javadoc/com/google/common/collect/BiMap.html#inverse())をご覧ください。 – sw1nn

答えて

4
Map<String, String> streetname = new HashMap<String, String>(); 

for (Entry<String,String> e : streetno.entrySet()) { 
    streetname.put(e.getValue(), e.getKey()); 
} 

forは、すべての項目に対してループを繰り返します(つまり、キーと値のペア)を元のマップに格納し、キーと値をスワップして2番目のマップに挿入します。

put()nullを返すことを確認することをお勧めします。 NULL以外の値を取得した場合は、streetnoの値が一意ではないことを意味します。これは宿題なので、結果を理解するために、そしてこれをどのように処理するのがベストかを判断するために、あなたに任せます。

+2

Ah誰かが宿題をちょうど解決するとき、私はそれが気に入らない。少し助けてください。しかし、すべての仕事をしないでください。結局のところ、学生はそれにいくらかの努力を払うことになるので、宿題です。 –

+2

元の値が一意であることを願っています。さもなければデータが失われています – Tom

2

あなたはほとんど存在しています。今、あなたは、最初のハッシュマップのキーを反復処理し、あなたがそれらの5行でやっていることをシミュレートする必要があります。

streetname.put("Sachin", "3"); 
streetname.put("Dravid", "2"); 
streetname.put("Sehwag", "1"); 
streetname.put("Laxman", "5"); 
streetname.put("Kohli", "4"); 

ヒント:地図の上に反復があなたのために少しトリッキーかもしれませんが、通常はそのように行われます。

for (String key : streetno.keySet()) { 
... 
} 

あなたの宿題で幸運を祈る!

+0

あなたは未知のダウン・ダウン者です、どうしましたか? –

+1

私はあなたにdownvoteをしませんでしたが...おそらくdownvoterは 'streetno.keySet()'に違反しました。本当に 'streetno.entrySet()'を使うべきです。そうしないと、再びマップにアクセスして値。 –

+0

これは本当ですが、おそらく少し遅くなりますが、これは宿題には十分に役立つと思います。私は 'entrySet'を避けたいと思っていました。なぜなら私は学生を混乱させるのではないかと思っていたからです(彼の専門知識のレベルはわかりません)。私の解でさえ、複雑さはO(n)のままです。 –

0

のJava 8:

Map<String, String> streetname = 
    streetno.entrySet() 
      .stream() 
      .collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); 

注:

あなたはparellelstream()代わりのstream()それ考え直すを使用するように誘惑された場合。これは、Mapが非常に大きい場合にのみ適切です。

関連する問題