Jason. Cała informatyka w jednym miejscu!

Skaczemy ponownie do Javy i teraz pokażę Wam jak korzystać z mniej znanej struktury danych kryjącą się pod nazwą "HashMap" w języku Java. Użytkownicy Pythona raczej będą ją nazywali "słownikiem". Ja też wolę to stwierdzenie, natomiast ze względu na zachowanie tagów, będę korzystał naprzemiennie z obu tych nazw. Przejdźmy do wyjaśnienia jak w języku Java korzystać ze słownika.

"HASHMAP" W JĘZYKU JAVA JAKO KOLEKCJA MNIEJ ZNANA OD "ARRAYLIST"

Niech zgadnę. Najczęściej korzystacie z "ArrayList", prawda? Może czas poznać chociaż parę innych struktur bo przecież "nie tylko tablicą dynamiczną Java żyje". Pozwólcie, że przedstawię Wam całkiem inną kolekcję danych, która pełni funkcję słownika. Słownik jest to jedna z kolekcji przechowującej pary "klucz-wartość" (tutaj jest artykuł poświęcony samym kolekcjom). To znaczy, że jeden klucz (najczęściej w postaci łańcucha, ale wcale nie musi tak być) jest przypisany dokładnie do jednej wartości. Dwie takie najważniejsze informacje jakie dotyczą par są takie, że po pierwsze primo, możliwość korzystania z dowolnego typu danych dla klucza i wartości zawdzięczamy typom generycznym, a po drugie primo, wartości mogą się powtarzać ale klucze już nie! I bądźcie pewni, że próba dodania nowej pary o takim samym kluczu skończy się nadpisaniem poprzedniej pary!!!

PRZYKŁAD KODU ŹRÓDŁOWEGO

Wiem, że to już może wyglądać nudnie, natomiast ponownie zademonstruję wykorzystanie w kodzie źródłowym. Mam taki zwyczaj, że zawsze odseparowuję klasę z metodą "main" od całej reszty, aby uniknąć konieczności wykorzystywania statycznych metod. Tak wygląda program w całości:

KLASA "MAIN"

public class Main {
	public static void main(String[] args) {
		new Launcher();
	}
}

KLASA "LAUNCHER"

import java .util.HashMap;

public class Launcher {
	private HashMap<String, Integer> characters = new HashMap<>();

	public Launcher() {
		createKeys();
		printKeys();
	}

	private void createKeys() {
		characters.put("Jacek", 25);
		characters.put("Celina", 25);
		characters.put("Karol", 23);
		characters.put("Zdzisław", 46);
		characters.put("Karolina", 22);
	}

	private void printKeys() {
		characters.forEach((k, v) -> System.out.println("Imię: " + k + ", lat " + v));
	}
}

Oto dwie klasy prezentujące strukturę "HashMap" w języku Java. Przyglądając się początkowi klasy "Launcher" mamy nasz "HashMap" a ponieważ każda kolekcja danych korzysta z typów generycznych, umieszczamy nawiasy trójkątne. W nich podajemy parę typów dla klucza i wartości. W naszym przykładzie słownik przedstawia listę imion oraz przechowuje wiek każdej z nich jako liczbę całkowitą. Naszym kluczem jest zatem typ "String", a wartością, "int". W konstruktorze umieszczamy dwie metody. Jedna dodaje klucze do słownika, a druga wypisuje je wszystkie.

Metoda "createKeys" prezentuje dodawanie kluczy do naszego słownika (czy też do tablicy asocjacyjnej). Prosta sprawa. Wywołanie metody "put", a następnie wstawiamy klucz zgodny z typem instancji oraz wartość, również zgodną z typem instancji. Gdybyśmy dla przykładu dali "float" jako typ wartości, to wtedy moglibyśmy również dorzucać wartości zmiennoprzecinkowe. To samo się tyczy klucza jednak nie miałoby to sensu, bo przypominam że klucze NIE mogą się powtarzać.

Druga metoda wypisuje wszystkie klucze i wartości przy pomocy metody "forEach" i wyrażenia lambda. To nam wypisze wszystkie klucze i wartości "podpięte" do nich, jedna po drugiej. Chcę przestrzec przed czymś bardzo ważnym! "HashMap" w języku Java NIE zapisuje kolejności dodawania nowych kluczy! Słownik jedynie gwarantuje, że wszystkie pary będą przechowywane. Przy powyższym wypisaniu wszystkich kluczy i wartości za pomocą "System.out.println" zobaczycie w konsoli, że kolejność wypisywanych kluczy jest dowolna. Jeżeli kiedykolwiek będziecie chcieli, aby kolejność była zachowywana taka sama, wystarczy jedynie, że zamienicie "HashMap" na "LinkedHashMap". Jest to alternatywna kolekcja zachowująca tę samą kolejność w której dochodziło do wprowadzania kluczy za pomocą "put".


I to byłby koniec najistotniejszych informacji o kolekcji "HashMap". Opanujcie podstawy, a gwarantuję że w przyszłości chociaż raz przyda się Wam słownik!

PODOBNE ARTYKUŁY