Получить ключи от 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());
}
Ответ 6
Как вы хотите получить аргумент (United
), для которого задано значение (5
), вы также можете рассмотреть возможность использования двунаправленной карты (например, предоставленной Guava: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/BiMap.html).
Ответ 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");
и помните, держите его простым;)