Mam taką Hashmapę w Javie:
private Map<String, Integer> team1 = new HashMap<String, Integer>();
Następnie wypełniam to tak:
team1.put("United", 5);
Jak mogę zdobyć klucze? Coś w stylu: team1.getKey()
powrót "United".
java
data-structures
java-6
masb
źródło
źródło
team1.getKey()
się zwrócić, jeśli: (1) mapa jest pusta lub (2) jeśli zawiera wiele kluczy?int
powinien być używany do takich pojedynczych.Odpowiedzi:
A
HashMap
zawiera więcej niż jeden klucz. Możesz użyć,keySet()
aby uzyskać zestaw wszystkich kluczy.będzie przechowywać
1
z kluczem"foo"
i2
kluczem"bar"
. Aby powtórzyć wszystkie klucze:wydrukuje
"foo"
i"bar"
.źródło
List<String> keys = new ArrayList<>(mLoginMap.keySet());
Jest to wykonalne, przynajmniej w teorii, jeśli znasz indeks:
keySet()
zwraca zestaw, więc konwertujesz zestaw na tablicę.Problem polega oczywiście na tym, że zestaw nie obiecuje dotrzymania zamówienia. Jeśli masz tylko jeden element w HashMap, jesteś dobry, ale jeśli masz więcej, najlepiej jest zapętlić mapę, tak jak zrobiły to inne odpowiedzi.
źródło
HashMap
. Dobry występ.Sprawdź to.
https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
(Użyj,
java.util.Objects.equals
ponieważ HashMap może zawieraćnull
)Korzystanie z JDK8 +
Bardziej „ogólne” i tak bezpieczne, jak to tylko możliwe
Lub jeśli korzystasz z JDK7.
źródło
HashMap
klucze są unikalne.Możesz odzyskać wszystkie
Map
klucze za pomocą tej metodykeySet()
. Otóż, jeśli potrzebujesz klucza, biorąc pod uwagę jego wartość , to zupełnie inna sprawa iMap
nie pomoże ci w tym; potrzebowałbyś wyspecjalizowanej struktury danych, takiej jakBidiMap
(mapa, która umożliwia dwukierunkowe wyszukiwanie między kluczem a wartościami) z kolekcji Commons firmy Apache - pamiętaj również, że kilka różnych kluczy może być mapowanych na tę samą wartość.źródło
Ponieważ chciałbyś otrzymać argument (
United
) dla którego podano wartość (5
), możesz również rozważyć użycie mapy dwukierunkowej (np. Dostarczonej przez Guava: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google /common/collect/BiMap.html ).źródło
Jeśli potrzebujesz czegoś prostego i bardziej weryfikacji.
Następnie możesz wyszukać dowolny klucz.
źródło
źródło
next()
dwa razy w pętli oznacza, że wydrukujesz klawisze o numerach nieparzystych wraz z wartościami o numerach parzystych.Użyj operacji funkcjonalnej, aby przyspieszyć iterację.
team1.keySet().forEach((key) -> { System.out.println(key); });
źródło
Rozwiązaniem może być, jeśli znasz pozycję klucza, przekonwertowanie kluczy na tablicę String i zwrócenie wartości w pozycji:
źródło
Wypróbuj ten prosty program:
źródło
źródło
Aby uzyskać klucze w HashMap, mamy metodę keySet (), która jest obecna w
java.util.Hashmap
pakiecie. np .:Teraz klucze będą miały wszystkie klucze dostępne na mapie. np .: [klucz1, klucz2]
źródło
java,util.HashMap
to klasa, a nie pakiet i nie ma tu niczego, czego nie było tu pięć lat temu.To, co zrobię, co jest bardzo proste, ale marnuje pamięć, to zmapowanie wartości za pomocą klucza i zrobienie odwrotnej kolejności, aby zmapować klucze z wartością, dzięki której:
private Map<Object, Object> team1 = new HashMap<Object, Object>();
ważne jest, abyś używał,
<Object, Object>
aby móc mapowaćkeys:Value
iValue:Keys
polubić toteam1.put("United", 5);
team1.put(5, "United");
Więc jeśli używasz
team1.get("United") = 5
iteam1.get(5) = "United"
Ale jeśli użyjesz jakiejś konkretnej metody na jednym z obiektów w parach, będzie lepiej, jeśli utworzysz inną mapę:
private Map<String, Integer> team1 = new HashMap<String, Integer>();
private Map<Integer, String> team1Keys = new HashMap<Integer, String>();
i wtedy
team1.put("United", 5);
team1Keys.put(5, "United");
i pamiętaj, nie komplikuj;)
źródło
Aby uzyskać klucz i jego wartość
na przykład
Wydrukuje: Klucz: United Wartość: 5 Klucz: Barcelona Wartość: 6
źródło