package gotowe.p25_kolekcje.zbieranie_danych;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class P5_HashMap {
	// Słowniki (mapy):
	// - zawierają pary klucz → wartość
	// - klucze nie mogą się powtarzać, wartości mogą
	// - wydajne są operacje dodawanie elementu i pobierania/wyszukiwania poprzez klucz
	// - niewydaje jest wyszukiwanie poprzez wartość
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		// W tym słowniku dla imienia osoby pamiętamy wiek tej osoby.
		// String (imię) jest kluczem, Integer (wiek) jest wartością.
		Map<String, Integer> slownik = new HashMap<>();
		
		while(true) {
			System.out.print("Podaj imię: ");
			// pusty String oznacza koniec
			String imie = scanner.nextLine();
			if(imie.isEmpty()) {
				break;
			}
			System.out.print("Podaj wiek: ");
			int wiek = scanner.nextInt();
			scanner.nextLine();
			slownik.put(imie, wiek);
		}
		
		System.out.println(slownik);
		System.out.println();
		
		// Drugi etap: użytkownik podaje imię, a program odczytuje wartość ze słownika (czyli wiek tej osoby)
		while(true) {
			System.out.print("Podaj imię: ");
			String imie = scanner.nextLine();
			if(imie.isEmpty()) {
				break;
			}
			// podstawową operacją do odczytywania danych ze słownika jest get(klucz)
			// jeśli istnieje wpis o podanym kluczu, to wynikiem jest wartość spod tego klucza
			// jeśli nie istnieje, to wynikiem jest null
			// w związku z tym gdy czytamy dane ze słownika bez wcześniejszego sprawdzenia, czy klucz istnieje,
			// trzeba użyć zmiennej typu obiektowego (tutaj Integer, a nie int)
			Integer wiek = slownik.get(imie);
			if(wiek == null) {
				System.out.println("W słowniku nie osoby " + imie);
			} else {
				System.out.println("Osoba " + imie + " ma " + wiek + " lat");
			}
			
			// Można też użyć operacji containsKey do sprawdzenia, czy słownik zawiera podany klucz
//			if(slownik.containsKey(imie)) {
//				System.out.println("Osoba " + imie + " ma " + slownik.get(imie) + " lat.");
//			} else {
//				System.out.println("W słowniku nie osoby " + imie);
//			}
		}
	}

}
