2012-01-24 5 views
1

私はJavaを使い慣れていません。私は以下のようにハッシュマップを実装しました。 特定のシナリオでは、キーの値を使用してキーを取得する必要がありました。 例:ユーザーが「Dravid」と入力した場合、ハッシュマップから「2」を取得する必要があります。ハッシュマップからキーを取得する

そして、これを実装するためにハッシュマップを1つだけ使用したいと思います。

誰もがこれを手伝ってくれますか?

HashMap<String,String> streetno=new HashMap<String,String>(); 
    streetno.put("1", "Sachin"); 
    streetno.put("2", "Dravid"); 
    streetno.put("3","Sehwag"); 
    streetno.put("4", "Laxman"); 
    streetno.put("5", "Kohli"); 
+2

おそらく、最初にこの[リンク](http://stackoverflow.com/questions/1383797/java-hashmap-how-to-get-key-from-valueを)見たいです。おそらくそれはあなたの問題を解決するのに役立ちます。 – Frankline

+1

これは通常のマップの使用ではありませんので、おそらくあなたはあなたのキーと値を交換する必要があるかもしれないので、キーは値になり、値はキーになるでしょう。 – Egor

答えて

1

これを行うには、あなたは双方向のハッシュマップを使用する必要があります。 Apache Commons implementationの使用を検討してください。

それがなければ、マップ内のすべてのキーと値のペアを繰り返し、その値が "Dravid"と等しいかどうかをテストし、キーを返す必要があります。同様に:

for (Entry<String, String> pair : streetno.entrySet()) { 
     if (pair.getValue().equals("Dravid")) { 
     System.out.println("Found Dravid at key: " + pair.getKey()); 
     } 
    } 
3

ショートバージョンなので、そこにあなたのために残さ実装するものです:

反復は、マップのすべてのエントリの上に、エントリの値に検索文字列を比較します。一致する場合は、キーを返します。

+0

はい..マップのすべてのエントリを繰り返し処理し、文字列を比較するために使用する必要がある関数を教えてください。 –

+0

Map.entrySet()と呼ばれています。 –

2

標準HashMapでは、探している値が見つかってからそのキーを返すまで、マップのエントリを繰り返し処理できます。

HashMapキーを知っていれば値をすばやく効率的に検索できますが、それ以外の方法では検索できません。いくつかの図書館では、キーを使って値をルックアップすることができます。たとえば、Google Guavaには、これをサポートするBiMapがあります。グアバのHashBiMapは、あなたがこれを行うことができます使用

BiMap<String, String> map = HashBiMap.create(); 
map.put("1", "Sachin"); 
map.put("2", "Dravid"); 
map.put("3", "Sehwag"); 
map.put("4", "Laxman"); 
map.put("5", "Kohli"); 

String key = map.inverse().get("Dravid"); 
1

上記の回答のいずれかを行うことができます。実際のロジックに進む前に、このチェックを追加することもできます。

if(streetno.containsValue("Dravid")){ 
    // do logic 
} 
else 
System.out.println("Not found"); 
関連する問題