Problem z HashMapa

0

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?

0

Pokaż kod.

0

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

0

Map.get() przyjmuje jako parametr klucz, nie index. W Twoim przypadku byłoby to "as".

0

A czy mozna w jakis sposob podać tam index?

0

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.

0

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

0

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).

0

@chrupek97: możesz zrobić kładę która będzie mieć dwa pola i wrzucić ja do listy

1

@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ść.

0

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ć.

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1