0

ハッシュマップの値に関連付けられている特定のキーを取得したい

「ME」のキーを取得したいのですが、どうすれば取得できますか?

コードスニペット :

HashMap<Integer,String> map = new HashMap<Integer,String>();
map.put(1,"I");
map.put(2,"ME");
4

5 に答える 5

3

あなたがやろうとしていることには小さな問題があります。ハッシュマップには同じ値が複数出現する可能性があるため、キーを値で検索すると、複数の結果 (同じ値を持つ複数のキー) が存在する可能性があります。

それでも、これが起こらないと確信している場合は、それを行うことができます。次の例を参照してください。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        HashMap<Integer, String> map = new HashMap<Integer, String>();
        map.put(5, "vijf");
        map.put(36, "zesendertig");
    }
    static Integer getKey(HashMap<Integer, String> map, String value) {
        Integer key = null;
        for(Map.Entry<Integer, String> entry : map.entrySet()) {
            if((value == null && entry.getValue() == null) || (value != null && value.equals(entry.getValue()))) {
                key = entry.getKey();
                break;
            }
        }
        return key;
    }
}
于 2012-08-03T12:42:25.853 に答える
2

map のエントリを反復処理します。

for(Entry<Integer, String> entry : map.entrySet()){
  if("ME".equals(entry.getValue())){
    Integer key = entry.getKey();
    // do something with the key
  }
}
于 2012-08-03T12:47:13.447 に答える
0

値が一意であることが保証されている場合は、グアバBiMapを使用します(対応する HashMap はHashBiMapと呼ばれます。

    Integer key = map.inverse().get("ME");

グアバのドキュメント

于 2012-08-03T12:46:30.870 に答える
0

値を見つけるには、キーのコレクションを反復処理する必要があります。

詳細については、この投稿をご覧ください: Java Hashmap: How to get key from value?

于 2012-08-03T12:41:33.970 に答える
0
/**
 * Return keys associated with the specified value
 */
public List<Integer> getKey(String value, Map<Integer, String> map) {
  List<Integer> keys = new ArrayList<Integer>();
  for(Entry<Integer, String> entry:map.entrySet()) {
    if(value.equals(entry.getValue())) {
      keys.add(entry.getKey());
    }
  }
  return keys;
}
于 2012-08-03T12:56:04.410 に答える