Interfata Map
Interfata Map descrie structuri de date care asociaza fiecarui element o cheie unica dupa care poate fi regasit. Intr-o astfel de structura nu sunt acceptate chei duplicate. Defineste perechi de tipul cheie-valoare, numite si tabele asociative.
public interface Map<K, V> { | |
int size(); | |
boolean isEmpty(); | |
boolean containsKey(Object key); | |
boolean containsValue(Object value); | |
V get(Object key); | |
V put(K key, V value); | |
V remove(Object key); | |
void putAll(Map<? extends K, ? extends V> m); | |
void clear(); | |
Set<K> keySet(); | |
Collection<V> values(); | |
Set<Map.Entry<K, V>> entrySet(); | |
boolean equals(Object o); | |
int hashCode(); | |
} |
Interfata Map ofera metode proprii de adaugare, stergere si obtinere a elementelor, care utilizeaza chei pentru a identifica elementele.
Metoda | Semnificatie |
---|---|
int size() | returneaza numarul de asocieri cheie-valoare |
boolean isEmpty() | returneaza true daca structura nu contine nici o asociere cheie-valoare |
boolean containsKey(Object o) | returneaza true daca exista o asociere pentru cheia specificata |
boolean containsValue(Object value) | returneaza true daca valorii specificate ii corespunde o cheie |
V get(Object key) | returneaza un element asociat unei chei |
V put(K key, V value) | asociaza elementul unei chei in tabelul asociativ |
V remove(Object key) | sterge elementul pentru cheia specificata din tabelul asociativ |
void putAll(Map<? extends K, ? extends V> m) | copiaza toate asocierile din structura specificata la structura curenta |
void clear() | sterge toate asocierile din tabelul asociativ |
Set keySet() | returneaza o multime care contine cheile din tabelul asociativ |
Collection values() | returneaza o colectie care contine valorile din tabelul asociativ |
Set<Map.Entry<K, V>> entrySet() | returneaza o multime care contine toate asocierile din tabelul asociativ |
Implementari standard
Pentru interfata Map sunt disponibile urmatoarele implementari standard:
• HashMap: implementare rapida, fara ordonare;
Aplicatia urmatoare are in vedere definirea unui tip de date catalog (CatalogMap), care permite gestionarea studentilor unei facultati prin intermediul unui tabel asociativ. Clasele Facultate si Student sunt definite la urmatoarea adresa Clase abstracte si interfete Java.
package ro.virtualcampus.app; | |
import ro.virtualcampus.person.Student; | |
import ro.virtualcampus.unit.Facultate; | |
import java.util.Map.Entry; | |
import ro.virtualcampus.map.CatalogMap; | |
public class AppMap { | |
public static void main(String[] args) { | |
Facultate etti = new Facultate("ETTI", "Vasile Parvan nr. 2"); | |
CatalogMap tst3 = new CatalogMap("3 TST"); | |
CatalogMap ea3 = new CatalogMap("3 EA"); | |
Student s1; | |
tst3.getStudenti().put("LK53425", s1 = new Student("Irina Popescu", 22, etti, 3)); | |
tst3.getStudenti().put("LK32425", new Student("Vlad Bucur", 23, etti, 3)); | |
ea3.getStudenti().put("LK12352", new Student("Mihai Voda", 25, etti, 4)); | |
ea3.getStudenti().put("LK98594", new Student("Bogdan Cornu", 24, etti, 4)); | |
tst3.transferStudenti(ea3.getStudenti()); | |
ea3.getStudenti().clear(); | |
tst3.afisareStudenti(); | |
if (tst3.getStudenti().remove("LK53425") != null) | |
System.out.println("studentul " + s1.getNume() + " a fost exmatriculat"); | |
else | |
System.out.println("studentul " + s1.getNume() + " nu poate fi exmatriculat"); | |
System.out.println("parcurgere studenti folosind for-each"); | |
for(Entry<String, Student> student: tst3.getStudenti().entrySet()) | |
System.out.println(student.getKey() + " " + student.getValue()); | |
if (tst3.getStudenti().containsKey("LK12352")) | |
System.out.println("studentul " + tst3.getStudenti().get("LK12352").getNume() + | |
" nu a absolvit inca"); | |
if (!tst3.getStudenti().isEmpty()) | |
System.out.println("nu se recomanda desfintarea anului de studiu " + | |
tst3.getAnStudiu()); | |
tst3.getStudenti().clear(); | |
tst3.afisareStudenti(); | |
} | |
} |
anul de studiu 3 TST are 4 studenti {LK98594=Student [facultate=Facultate [nume=ETTI, adresa=Vasile Parvan nr. 2], anStudiu=4, nume=Bogdan Cornu, varsta=24], LK32425=Student [facultate=Facultate [nume=ETTI, adresa=Vasile Parvan nr. 2], anStudiu=3, nume=Vlad Bucur, varsta=23], LK53425=Student [facultate=Facultate [nume=ETTI, adresa=Vasile Parvan nr. 2], anStudiu=3, nume=Irina Popescu, varsta=22], LK12352=Student [facultate=Facultate [nume=ETTI, adresa=Vasile Parvan nr. 2], anStudiu=4, nume=Mihai Voda, varsta=25]} studentul Irina Popescu a fost exmatriculat parcurgere studenti folosind for-each LK98594 Student [facultate=Facultate [nume=ETTI, adresa=Vasile Parvan nr. 2], anStudiu=4, nume=Bogdan Cornu, varsta=24] LK32425 Student [facultate=Facultate [nume=ETTI, adresa=Vasile Parvan nr. 2], anStudiu=3, nume=Vlad Bucur, varsta=23] LK12352 Student [facultate=Facultate [nume=ETTI, adresa=Vasile Parvan nr. 2], anStudiu=4, nume=Mihai Voda, varsta=25] studentul Mihai Voda nu a absolvit inca nu se recomanda desfintarea anului de studiu 3 TST anul de studiu 3 TST are 0 studenti {}
• TreeMap: cheile sunt ordonate crescator.
package ro.virtualcampus.app; | |
import java.util.TreeMap; | |
import java.util.Map.Entry; | |
import ro.virtualcampus.ecom.Produs; | |
public class AppTreeMap { | |
public static void main(String[] args) { | |
TreeMap<Integer, Produs> db = new TreeMap<Integer, Produs>(); | |
db.put(1000, new Produs("Monitor", 350.00)); | |
db.put(1011, new Produs("Procesor", 200.23)); | |
db.put(1102, new Produs("Placa de baza", 320.3)); | |
db.put(2023, new Produs("Mouse", 10.5)); | |
db.put(2034, new Produs("Tastatura", 19.99)); | |
System.out.println(db); | |
for(Entry<Integer, Produs> produs: db.entrySet()) | |
System.out.println(produs.getKey() + " " + produs.getValue()); | |
} | |
} |
{1000=Produs [descriere=Monitor, pret=350.0], 1011=Produs [descriere=Procesor, pret=200.23], 1102=Produs [descriere=Placa de baza, pret=320.3], 2023=Produs [descriere=Mouse, pret=10.5], 2034=Produs [descriere=Tastatura, pret=19.99]} 1000 Produs [descriere=Monitor, pret=350.0] 1011 Produs [descriere=Procesor, pret=200.23] 1102 Produs [descriere=Placa de baza, pret=320.3] 2023 Produs [descriere=Mouse, pret=10.5] 2034 Produs [descriere=Tastatura, pret=19.99]