Problem z HashMapa

Problem z HashMapa
C9
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 4 lata
  • 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:prawie 8 lat
  • Ostatnio:prawie 7 lat
  • Postów:122
0

Pokaż kod.


Wenn ist das Nunstück git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!
C9
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 4 lata
  • 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
Dodawaj kod w znaczniki formatujące!
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 10 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10086
0

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

edytowany 1x, ostatnio: Riddle
C9
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 4 lata
  • Postów:31
0

A czy mozna w jakis sposob podać tam index?

Cr0w
Polecam przejrzeć obie części ;) http://mooc.fi/courses/2013/programming-part-1/
sqlka
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 6 lat
  • 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.

edytowany 7x, ostatnio: sqlka
C9
Ale da się to zrobić w sposób taki, aby posługiwać się indeksem?
sqlka
Jeśli chcesz się posługiwać indeksem, to używasz listy. W mapie metoda get zwraca wartość do przypisanego jej klucza.
C9
Problem w tym, że potrzebuje w jednej komórce przetrzymywać dwie wartości, a w przypadku tablic wyrzucany jest błąd
IC
Mapa służy do przechowywania danych w formie klucz - wartość. Ma inne zastosowanie, służy bardziej do przypisania danym w jednej formie danych w innej formie lub relacji. Do twojego problemu możesz użyć tablicy dwuwymiarowej, lub stworzyć jakiś obiekt w którym przechowasz te dwie dane, a następnie zapiszesz w preferowanej strukturze danych jak np. lista czy tablica.
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • 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


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
jarekczek
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 4 lata
  • 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).


Przeważnie ignoruję niezarejestrowanych użytkowników.
edytowany 1x, ostatnio: jarekczek
DR
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 godzin
  • Postów:1131
0

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

Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • 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ść.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
P7
  • Rejestracja:ponad 9 lat
  • Ostatnio:dzień
  • Lokalizacja:Warszawa
  • Postów:89
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
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 10 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10086
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.

edytowany 4x, ostatnio: Riddle

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.