206

私は次のようなJavaのハッシュマップを持っています:

private Map<String, Integer> team1 = new HashMap<String, Integer>();

次に、次のように入力します。

team1.put("United", 5);

どうすれば鍵を入手できますか?のようなもの:team1.getKey()「ユナイテッド」を返す。

4

15 に答える 15

365

AHashMapには複数のキーが含まれています。keySet()すべてのキーのセットを取得するために使用できます。

team1.put("foo", 1);
team1.put("bar", 2);

1with key"foo"2with keyを格納します"bar"。すべてのキーを反復処理するには:

for ( String key : team1.keySet() ) {
    System.out.println( key );
}

と が出力され"foo"ます"bar"

于 2012-05-05T14:34:30.233 に答える
60

インデックスを知っていれば、少なくとも理論的には実行可能です。

System.out.println(team1.keySet().toArray()[0]);

keySet()セットを返すので、セットを配列に変換します。

もちろん、問題は、セットが注文を守ることを約束しないことです. HashMap にアイテムが 1 つしかない場合は問題ありませんが、それ以上のアイテムがある場合は、他の回答が行っているように、マップをループすることをお勧めします。

于 2015-06-18T18:17:17.093 に答える
26

これをチェックして。

https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

( java.util.Objects.equalsHashMap に を含めることができるため使用null)

JDK8+ の使用

/**
 * Find any key matching a value.
 *
 * @param value The value to be matched. Can be null.
 * @return Any key matching the value in the team.
 */
private Optional<String> findKey(Integer value){
    return team1
        .entrySet()
        .stream()
        .filter(e -> Objects.equals(e.getValue(), value))
        .map(Map.Entry::getKey)
        .findAny();
}

/**
 * Find all keys matching a value.
 *
 * @param value The value to be matched. Can be null.
 * @return all keys matching the value in the team.
 */
private List<String> findKeys(Integer value){
    return team1
        .entrySet()
        .stream()
        .filter(e -> Objects.equals(e.getValue(), value))
        .map(Map.Entry::getKey)
        .collect(Collectors.toList());
}

より「一般的」で、可能な限り安全

/**
 * Find any key matching the value, in the given map.
 *
 * @param mapOrNull Any map, null is considered a valid value.
 * @param value     The value to be searched.
 * @param <K>       Type of the key.
 * @param <T>       Type of the value.
 * @return An optional containing a key, if found.
 */
public static <K, T> Optional<K> findKey(Map<K, T> mapOrNull, T value) {
    return Optional.ofNullable(mapOrNull).flatMap(map -> map.entrySet()
            .stream()
            .filter(e -> Objects.equals(e.getValue(), value))
            .map(Map.Entry::getKey)
            .findAny());
}

または、JDK7 を使用している場合。

private String findKey(Integer value){
    for(String key : team1.keySet()){
        if(Objects.equals(team1.get(key), value)){
            return key; //return the first found
        }
    }
    return null;
}

private List<String> findKeys(Integer value){
   List<String> keys = new ArrayList<String>();
   for(String key : team1.keySet()){
        if(Objects.equals(team1.get(key), value)){
             keys.add(key);
      }
   }
   return keys;
}
于 2012-05-05T14:36:30.977 に答える
7
于 2012-05-05T14:35:03.997 に答える
2

United値が指定された( )引数 ( ) を取得したいので、5双方向マップの使用を検討することもできます (たとえば、Guava によって提供されます: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google /common/collect/BiMap.html )。

于 2012-05-05T14:37:32.553 に答える
2

関数演算を使用して反復を高速化します。

team1.keySet().forEach((key) -> {
      System.out.println(key);
});
于 2020-03-02T13:50:27.103 に答える
2
private Map<String, Integer> _map= new HashMap<String, Integer>();
Iterator<Map.Entry<String,Integer>> itr=  _map.entrySet().iterator();
                //please check 
                while(itr.hasNext())
                {
                    System.out.println("key of : "+itr.next().getKey()+" value of      Map"+itr.next().getValue());
                }
于 2013-09-09T17:37:23.637 に答える
1

シンプルでより多くの検証が必要な場合。

public String getKey(String key)
{
    if(map.containsKey(key)
    {
        return key;
    }
    return null;
}

その後、任意のキーを検索できます。

System.out.println( "Does this key exist? : " + getKey("United") );
于 2013-07-24T22:50:42.683 に答える
-1

この簡単なプログラムを試してください:

public class HashMapGetKey {

public static void main(String args[]) {

      // create hash map

       HashMap map = new HashMap();

      // populate hash map

      map.put(1, "one");
      map.put(2, "two");
      map.put(3, "three");
      map.put(4, "four");

      // get keyset value from map

Set keyset=map.keySet();

      // check key set values

      System.out.println("Key set values are: " + keyset);
   }    
}
于 2014-08-05T07:53:23.633 に答える
-2

私がやることは非常に単純ですが、メモリを浪費することは、値をキーでマップし、反対のことをしてキーを値でマップすることです。

private Map<Object, Object> team1 = new HashMap<Object, Object>();

<Object, Object>マップkeys:Valueを作成しValue:Keysてこのように使用できるようにすることが重要です

team1.put("United", 5);

team1.put(5, "United");

したがって、使用する team1.get("United") = 5team1.get(5) = "United"

しかし、ペアのオブジェクトの 1 つで特定の方法を使用する場合は、別のマップを作成した方がよいでしょう。

private Map<String, Integer> team1 = new HashMap<String, Integer>();

private Map<Integer, String> team1Keys = new HashMap<Integer, String>();

その後

team1.put("United", 5);

team1Keys.put(5, "United");

覚えておいてください、それをシンプルにしてください;)

于 2016-03-22T16:50:41.157 に答える