Problem z HashMapa

Problem z HashMapa
C9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
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?

EP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 122
0

Pokaż kod.

C9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
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));
}

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0

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

C9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
0

A czy mozna w jakis sposob podać tam index?

sqlka
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wawa
  • Postów: 250
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.

S9
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 3573
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

jarekczek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Siemianowice Śląskie
  • Postów: 500
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).

DR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1135
0

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

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
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ść.

P7
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 91
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ć.

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0

To jest najbardziej Clean rozwiązanie:

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.