2009-02-26 11 views
1

ハッシュテーブルを反復処理してキーを文字列として返すメソッドを作成しようとしていますが、これについては最善の方法はありますか?HashTableのキーを見つけるメソッド

EDIT:コメント

申し訳ありませんからコピーされ、私はそれがより明確にしなかった場合、私はJavaでこれをやろうとしています。私は、テストクラスを作成しました

public void runprog() { 
    hashMap.put("Butter", 50); 
    hashMap.put("Beans", 40); 
    for (Object o: hashMap.entrySet()) { 
     Map.Entry entry = (Map.Entry) o; 
     System.out.println(entry.getKey() + " " + entry.getValue()); 
    } 
} 

それは私が値

public Object findValue(String Name){ 
    for (Object o: hashMap.entrySet()) { 
     Map.Entry entry = (Map.Entry) o; 
     return entry.getValue(); 
    } 
    return null; 
} 

私はバターを探してキーを検索し、返すメソッドを作成しました

 
Butter 50 
Beans 40 

出力します50を返します。返す豆を探します。50

+0

?これまでに何を試してみましたか、それはどうやって動かないのですか?もっと情報をお願いします! –

+1

なぜあなたはそれを反復していますか?それはハッシュテーブルです。ルックアップはハッシュを使って実行されます。 –

+0

詳細を教えてください。 –

答えて

4

セットアップ:

キー、値(ルックアップ)を見つける考える
final Object sentinal = new Object(); 


    Map<String, Object> map = new HashMap<String, Object>(){{ 
     put("key1", new Object()); 
     put("key2", sentinal); 
    }}; 

:値が与えられ

System.out.println(map.get("key2") == sentinal); 

を、それが(逆引き参照)のキーです見つける:

for(Map.Entry<String, Object> entry : map.entrySet()){ 
     if(entry.getValue() == sentinal){ 
      System.out.println(entry.getKey()); 
     } 
    } 

...しかし、私ならば私は、一般的に逆のマップを構築し、定期的に逆引き参照を実行する必要があります。

Map<Object, String> reverse = new HashMap<Object, String>(); 
    for(Map.Entry<String, Object> entry : map.entrySet()){ 
     reverse.put(entry.getValue(), entry.getKey()); 
    } 
    System.out.println(reverse.get(sentinal)); 
0

申し訳ありませんが、私は「didnの場合私はJavaでこれをやろうとしています。 私は、テストクラスを作成しました

public void runprog() { 
    hashMap.put("Butter", 50); 
    hashMap.put("Beans", 40); 
    for (Object o: hashMap.entrySet()) { 
     Map.Entry entry = (Map.Entry) o; 
     System.out.println(entry.getKey() + " " + entry.getValue()); 
    } 
} 

それは私が値

public Object findValue(String Name){ 
    for (Object o: hashMap.entrySet()) { 
     Map.Entry entry = (Map.Entry) o; 
     return entry.getValue(); 
    } 
    return null; 
} 

私が探してキーを検索し、返すメソッドを作成しました

Butter 50 
Beans 40 

を出力しますバターそれは私が豆を探すときに50を返す50

+0

私はまだあなたが達成しようとしていることを理解していない... – pgras

7

宿題のように見える例データ( "Butter"、 "Beans")...

例では、findValueは毎回マップ/テーブルのFIRST KEYを返します。あなたは、あなたが押し込んだキー(名前)を使用していません。あなたの問題を解決する例があります。間違った方法でマップを使っていると思います。

これを行うには良い方法:

// assume Name is your key, ex. "Butter" 
// No need to iterate since maps are designed for lookup 
Object value = map.get(Name); 

あなたの例では、固定:

public Object findValue(String Name){ 
    for (Object o: hashMap.entrySet()) { 
     Map.Entry entry = (Map.Entry) o; 

     // THIS IS THE IMPORTANT LINE 
     if(entry.getKey().equals(Name)) 
     { 
      return entry.getValue(); 
     } 
    } 
    return null; 
} 
1

は、あなたが実際にどこにでもNameパラメータを使用していない、コードの2番目のスニペットを見てみます。だから、ループの周りではじめてエントリの値が返され、最初の値は50になります。

あなたはエントリのキーは、実際にあなたが値でキーを取得するためにループに使用して...

0

を探している名前は、時間effecientないと等しいかどうかを確認する必要があります!あなたはHashTableの恩恵を受けません。

ストレートリバースとリバースリトライにハッシュテーブルを使用したいので、2つのハッシュテーブルを使用できます。 表1(キー、値)表2(キー値、)あなたが返すようにしたいんキー

//Table1 
hashtable1.put("Butter", 50); 
hashtable1.put("Beans", 40); 

//Table2 
hashtable2.put(50, "Butter"); 
hashtable2.put(40, "Beans"); 

//Retrieving by key 
System.out.println(hashtable1.get(50)); 

//Retrieving by value 
System.out.println(hashtable2.get("Butter")); 

出力


バター

関連する問題