Получить ключи от HashMap в Java

У меня есть Hashmap в Java, как это:

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

Затем я заполняю его следующим образом:

team1.put("United", 5);

Как я могу получить ключи? Что-то вроде: team1.getKey(), чтобы вернуть "United".

Ответ 1

A HashMap содержит более одного ключа. Вы можете использовать keySet(), чтобы получить набор всех ключей.

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

сохранит 1 с помощью клавиш "foo" и 2 с помощью клавиши "bar". Чтобы перебрать все клавиши:

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

напечатает "foo" и "bar".

Ответ 2

Это выполнимо, по крайней мере теоретически, , если, вы знаете индекс:

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

keySet() возвращает список, поэтому вы преобразовываете список в массив.

Проблема, конечно, в том, что набор не обещает сохранить ваш заказ. Если у вас есть только один элемент в HashMap, вы хороши, но если у вас есть больше, лучше всего перебирать карту, как это сделали другие ответы.

Ответ 3

Проверьте это.

http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

Предполагая, что у вас есть другое значение для каждого ключа, вы можете сделать что-то вроде этого:

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

Или если вы не можете предположить, что каждая клавиша имеет другое значение:

private List<String> getKeys(Integer value){
   List<String> keys = new ArrayList<String>();
   for(String key : team1.keySet()){
      if(team1.get(key).equals(value)){
             keys.add(key);
      }
   }
   return keys;
}

Или используя JDK8

private Optional<String> getKey(Integer value){
    return team1
        .entrySet()
        .stream()
        .filter(e -> e.getValue().equals(value))
        .map(e -> e.getKey())
        .findFirst();
}

private List<String> getKeys(Integer value){
    return team1
        .entrySet()
        .stream()
        .filter(e -> e.getValue().equals(value))
        .map(e -> e.getKey())
        .collect(Collectors.toList());
}

Ответ 4

Вы можете получить все клавиши Map, используя метод keySet(). Теперь, если вам нужно получить ключ, учитывая его ценность, совершенно другое дело и Map не помогут вам; вам понадобится специализированная структура данных, например BidiMap (карта, которая позволяет двунаправленный поиск между ключом и значениями) из Apache Коллекции коллекций - также следует учитывать, что несколько разных ключей могут быть сопоставлены с одним и тем же значением.

Ответ 5

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());
                }

Ответ 7

Если вам просто нужно что-то простое и более проверенное.

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

Затем вы можете выполнить поиск любой клавиши.

System.out.println( "Does this key exist? : " + getKey("United") );

Ответ 8

Попробуйте эту простую программу:

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);
   }    
}

Ответ 9

public class MyHashMapKeys {

    public static void main(String a[]){
        HashMap<String, String> hm = new HashMap<String, String>();
        //add key-value pair to hashmap
        hm.put("first", "FIRST INSERTED");
        hm.put("second", "SECOND INSERTED");
        hm.put("third","THIRD INSERTED");
        System.out.println(hm);
        Set<String> keys = hm.keySet();
        for(String key: keys){
            System.out.println(key);
        }
    }
}

Ответ 10

Чтобы получить Key и его значение

например

private Map<String, Integer> team1 = new HashMap<String, Integer>();
  team1.put("United", 5);
  team1.put("Barcelona", 6);
    for (String key:team1.keySet()){
                     System.out.println("Key:" + key +" Value:" + team1.get(key)+" Count:"+Collections.frequency(team1, key));// Get Key and value and count
                }

Будет напечатан: Ключ: United Value: 5               Ключ: Барселона Значение: 6

Ответ 11

Что я буду делать, что очень просто, но потерять память - это сопоставить значения с ключом и сделать oposite для сопоставления клавиш со значением, создающим это:

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") = 5 и team1.get(5) = "United"

Но если вы используете какой-то конкретный метод для одного из объектов в парах, мне будет лучше, если вы создадите другую карту:

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

и помните, держите его простым;)