2

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

編集:コメントからコピー

もっと明確にしなかった場合は申し訳ありませんが、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());
    }
}

それは出力します

バター 50
ビーンズ 40

キーを探して値を返すメソッドを作成しました

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

Butter を探すと 50 を返します Beans を探すと 50 を返します

4

5 に答える 5

9

サンプルデータ( "Butter"、 "Beans")を考えると、宿題のようです。

あなたの例では、findValueは毎回マップ/テーブルの最初のキーを返します。一時停止したキー(名前)を使用していません。これは、マップをすべて間違った方法で使用していると考えて、問題を修正する例です。

これを行うためのより良い方法:

// 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;
}
于 2009-02-26T15:59:54.583 に答える
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));
于 2009-02-26T12:31:23.087 に答える
0

はっきりさせなかった場合は申し訳ありませんが、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());
    }
}

出力します

Butter 50
Beans 40

キーを探して値を返すメソッドを作成しました

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

バターを探すと50を返しますビーンズを探すと50を返します

于 2009-02-26T12:40:32.160 に答える
0

forループを使用してキーを値で取得するのは時間効率が悪い!! HashTable の恩恵を受けません。

したがって、ストレートおよびリバース検索にハッシュテーブルを使用する場合は、2 つのハッシュテーブルを使用できます。Table1 (キー、値) Table2 (値、キー)

//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"));

出力


バター

50

于 2012-01-13T15:34:26.933 に答える