Sleutels ophalen van HashMap in Java

Ik heb een Hashmap in Java zoals deze:

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

Dan vul ik het als volgt in:

team1.put("United", 5);

Hoe kan ik de sleutels krijgen? Iets als: team1.getKey()om “United” terug te geven.


Antwoord 1, autoriteit 100%

Een HashMapbevat meer dan één sleutel. Je kunt keySet()gebruiken om de set van alle sleutels te krijgen.

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

bewaart 1met sleutel "foo"en 2met sleutel "bar". Om alle sleutels te herhalen:

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

drukt "foo"en "bar"af.


Antwoord 2, autoriteit 16%

Dit is mogelijk, althans in theorie, alsu de index kent:

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

keySet()retourneert een set, dus je converteert de set naar een array.

Het probleem is natuurlijk dat een set niet belooft je bestelling te houden. Als je maar één item in je HashMap hebt, zit je goed, maar als je er meer hebt, kun je het beste over de kaart lopen, zoals andere antwoorden hebben gedaan.


Antwoord 3, autoriteit 7%

Controleer dit.

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

(Gebruik java.util.Objects.equalsomdat HashMap nullkan bevatten)

JDK8+ gebruiken

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

Meer “algemeen” en zo veilig mogelijk

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

Of als je op JDK7 zit.

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

Antwoord 4, autoriteit 2%

Je kunt alle sleutels van de Mapophalen met de methode keySet(). Als je nu een sleutelnodig hebt met zijn waarde, dan is dat een heel andere zaak en Mapzal je daar niet helpen; je hebt een gespecialiseerde gegevensstructuur nodig, zoals BidiMap(een kaart die bidirectionele opzoeking tussen sleutel en waarden mogelijk maakt) van Apache’s Commons-verzamelingen– houd er ook rekening mee dat verschillende sleutels kunnen worden toegewezen aan dezelfde waarde.


Antwoord 5

Omdat u een argument (United) wilt krijgen waarvoor de waarde wordt gegeven (5), kunt u ook overwegen een bidirectionele kaart te gebruiken (bijv. geleverd door Guava: http://docs.guava-libraries.googlecode .com/git/javadoc/com/google/common/collect/BiMap.html).


Antwoord 6

Als je gewoon iets simpels en meer een verificatie nodig hebt.

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

Vervolgens kunt u naar elke sleutel zoeken.

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

Antwoord 7

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

Antwoord 8

Gebruik functionele bewerking voor snellere iteratie.

team1.keySet().forEach((key) -> {
System.out.println(key);
});


Antwoord 9

Een oplossing kan zijn, als u de sleutelpositie kent, de sleutels om te zetten in een String-array en de waarde in de positie terug te geven:

public String getKey(int pos, Map map) {
    String[] keys = (String[]) map.keySet().toArray(new String[0]);
    return keys[pos];
}

Antwoord 10

Probeer dit eenvoudige programma:

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

Antwoord 11

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

Antwoord 12

Om sleutels in HashMap te krijgen, hebben we de methode keySet() die aanwezig is in het pakket java.util.Hashmap.
vb:

Map<String,String> map = new Hashmap<String,String>();
map.put("key1","value1");
map.put("key2","value2");
// Now to get keys we can use keySet() on map object
Set<String> keys = map.keySet();

Nu hebben sleutelsal uw sleutels beschikbaar op de kaart.
vb: [sleutel1,sleutel2]


Antwoord 13

Wat ik zal doen, wat heel eenvoudig is, maar geheugen verspilt, is om de waarden toe te wijzen met een sleutel en het tegenovergestelde te doen om de sleutels toe te wijzen met een waarde waardoor dit:

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

het is belangrijk dat u <Object, Object>gebruikt, zodat u keys:Valueen Value:Keysop deze manier kunt toewijzen

team1.put("United", 5);

team1.put(5, "United");

Dus als je team1.get("United") = 5en team1.get(5) = "United"

gebruikt

Maar als je een specifieke methode gebruikt op een van de objecten in de paren, kan ik beter een andere kaart maken:

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

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

en dan

team1.put("United", 5);

team1Keys.put(5, "United");

en onthoud, houd het simpel 😉


Antwoord 14

Om Sleutelen de waarde

. te krijgen

bijv.

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
                }

Wordt afgedrukt:Sleutel: United Waarde:5
Sleutel: Barcelona Waarde:6

Other episodes