Cześć, mam dwa pytania związane z "pobieraniem" (wyświetlaniem?) wartości z kolekcji typu List i Map. Najpierw zacznę od Listy, napisałem taki przykładowy programik:
package test1;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Klasa1{
int a; int b;
Klasa1(){a=0; b=0;};
Klasa1(int a, int b){this.a=a; this.b=b;};
void show(){
System.out.println("A = "+a+"; B = "+b);
}
}
public class Test1 {
public static void main(String[] args)
throws java.io.IOException{
int i=0;
List<Klasa1> lista = new ArrayList<Klasa1>();
while(i<3){
lista.add(new Klasa1(i,i+1));
i++;
}i=0;
while(i<lista.size()){
System.out.println("Indeks elementu: "+i);
lista.get(i).show();
System.out.println();
i++;
}
}
}
I teraz pytanie: czy pobranie elementu z listy w taki sposób i jednoczesne wywołanie metody z klasy, która jest elementem listy jest napisane dobrze? Chodzi mi konkretnie o tą linijkę kodu:
lista.get(i).show();
Czy jest to jak najbardziej poprawne? Nie znalazłem nigdzie takie zapisu, po prostu sam napisałem po indeksie kropkę i wywołałem metodę show() i okazało się, że działa.
Drugie pytanie dotyczące Map, program bardzo podobny do poprzedniego (w sumie w konsoli działa w identyczny sposób):
package mapa;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
class Klasa1{
int a; int b;
Klasa1(){a=0; b=0;};
Klasa1(int a, int b){this.a=a; this.b=b;};
void show(){
System.out.println("A = "+a+"; B = "+b);
}
}
public class Mapa {
public static void main(String[] args) {
Map<Integer, Klasa1> mapa = new HashMap<>();
int i=0;
while(i<3){
mapa.put(i, new Klasa1(i,i+1));
i++;
} i=0;
Klasa1 ob1 = new Klasa1();
while(i<3){
ob1 = mapa.get(i);
System.out.println("Klucz elementu: "+i);
ob1.show();
System.out.println();
i++;
}
}
}
Tutaj nie wiedziałem jak wyświetlić wartość wszystkich wartości w Mapie, więc od biedy stworzyłem nowy obiekt typu Klasa1 o referencji ob1 i w każdej iteracji pętli przypisywałem do niego kolejną wartość z Mapy. Niby działa, ale czy jest to ok? I czy można napisać to podobnie, jak zrobiłem w przypadku listy, czyli mniej więcej coś takiego:
mapa.get(i).show() //nie zadziałało
I na koniec: Jak mamy Mapę, to mam rozumieć, że w ostrych nawiasach najpierw mamy klucz, a potem wartość? Czyli gdybym zadeklarował Mapę odwrotnie, jak to zrobiłem w powyższym przykładzie, czyli:
Map<Klasa1, Integer> mapa = new HashMap<>();
To wtedy kluczem byłby obiekt typu Klasa1, a wartością jakiś obiekt Integer?