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?
Pokaż kod.
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));
}
Map.get()
przyjmuje jako parametr klucz, nie index. W Twoim przypadku byłoby to "as"
.
A czy mozna w jakis sposob podać tam index?
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.
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
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
).
@chrupek97: możesz zrobić kładę która będzie mieć dwa pola i wrzucić ja do listy
@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ść.
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ć.
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.