Witam.
Nie wiem dlaczego, ale wprowadzając dane do HashMapy, a następnie wyświetlając je ciągle wypisuje null, choć w rzeczywistości dane są dodane. Czym to może być spowodowane?
Problem z HashMapa
- Rejestracja: dni
- Ostatnio: dni
- Postów: 31
- Rejestracja: dni
- Ostatnio: dni
- Postów: 122
Pokaż kod.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 31
HashMap<String, String> s=new HashMap<String, String>();
s.put("as", "das");
for(int p=0;p<s.size();p++){
System.out.println(s.get(p));
}
- Rejestracja: dni
- Ostatnio: dni
- Postów: 10227
Map.get() przyjmuje jako parametr klucz, nie index. W Twoim przypadku byłoby to "as".
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wawa
- Postów: 250
Napisz sobie konkretnie na kartce jaki chcesz mieć rezultat. Minimum 3 przykłady, żebyś miał jasność jaki ma być wynik końcowy.
To jest podstawa. Jeśli już wiesz czego potrzebujesz wpisujesz krótką frazę w googlei na pewno znajdziesz odpowiedź,
Warto też od razu zajrzeć do dokumentacji, żeby obejrzeć jakie metody ma mapa a jakie lista.
Jeśli chodzi ci o taki wynik:
miasto: Warszawa, Poznań, Kraków
państwo: Francja, Polska, Brazylia
rzeka: Wołga, Tamiza, Odra
To możesz użyć listy, podanej do mapy jako parametr.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
- Postów: 3573
Ale HashMapa nie ma z góry ustalonej kolejności więc jakim cudem mógłbyś się dostac po indeksie? Bez sensu :P
A jak chcesz w jednej komórce mieć 2 wartości to zrób np. Liste tablic o wielkości 2
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Siemianowice Śląskie
- Postów: 500
A czy mozna w jakis sposob podać tam index?
Można, pośrednio. Robisz getKeys()keySet() i dostajesz listę kluczy, do których masz dostęp po indeksie (albo iterując, for).
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1135
@chrupek97: możesz zrobić kładę która będzie mieć dwa pola i wrzucić ja do listy
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Space: the final frontier
- Postów: 26433
@chrupek97 jak chcesz używać indeksów to wkładaj dane do ArrayList a nie do HashMap. Jeśli pół biedy jakby to było LinkedHashMap, bo miałbyś zachowaną kolejność wstawiania, ale zwykłe HashMap będzie miało dla ciebie zupełnie "losową" kolejność.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
- Postów: 91
Jak chcesz po prostu iterować po wartościach mapy to możesz użyć metody values() żeby mieć dostęp do kolekcji wartości i po niej iterować.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 10227
To jest najbardziej Clean rozwiązanie:
List<Pair<String, String>> list = new ArrayList<>();
list.add(new Pair("foo", "bar"));
list.add(new Pair("siema", "yo");
list.get(0).getKey() // "foo"
list.get(0).getValue() // "bar"
list.get(1).getKey() // "siema"
list.get(1).getValue() // "yo"
Jeśli stwierdzisz że potrzebujesz więcej niż dwie wartości, to sugeruję zrobić swóją klasę o 3 lub więcej polach, i wtedy taka List<> trzymałaby obiekty Twojej klasy, zamiast Pair<>.
@Pablitto77 Wtedy nie będzie miał dostępu do kluczy. Ps: tak, wiem że zamiast tego mógłby zrobić keys() ale wtedy osobno wyciągałby klucze i wartości, średnie rozwiązanie, poza tym chyba nie jest powiedziane że klucze i wartości muszą być w dobrej kolejności bo mapa nie trzyma orderu. Już lepiej zrobić dwie listy.