This shows you the differences between two versions of the page.
poo:laboratoare:08 [2017/11/15 08:23] mihai.nan |
poo:laboratoare:08 [2022/11/24 13:08] (current) carmen.odubasteanu [ATENTIE! Se vor folosi tipuri generice in toate problemele!] |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== Laboratorul 08. ===== | ===== Laboratorul 08. ===== | ||
+ | |||
+ | ==== ATENTIE! Se vor folosi tipuri generice in toate problemele! ==== | ||
+ | |||
+ | {{:poo:laboratoare:lab8.zip|Arhiva laborator}} | ||
=== Problema 1 === | === Problema 1 === | ||
- | Să se definească o clasă generică **//ArrayMap//** pentru un dicționar realizat ca o colecție de obiecte **//ArrayMapEntry//** (colecția va fi obiect de tip **//ArrayList//**). Clasa **//ArrayMapEntry//** va implementa interfața **//Map.Entry//** și va avea următoarele metode: | + | Să se definească o clasă **__generică__** **//ArrayMap//** pentru un dicționar realizat ca o colecție de obiecte **//ArrayMapEntry//** (colecția va fi obiect de tip **//ArrayList//**). Clasa **//ArrayMapEntry//** va implementa interfața **//Map.Entry//** și va avea următoarele metode: |
<code java> | <code java> | ||
+ | public class ArrayMapEntry<K, V> implements Map.Entry<K, V> { | ||
+ | private K key; | ||
+ | private V value; | ||
+ | ...// constructor | ||
public K getKey(); | public K getKey(); | ||
public V getValue(); | public V getValue(); | ||
Line 11: | Line 19: | ||
public boolean equals(Object o); | public boolean equals(Object o); | ||
public int hashCode(); | public int hashCode(); | ||
+ | } | ||
</code> | </code> | ||
Line 16: | Line 25: | ||
<code java> | <code java> | ||
+ | public class ArrayMap<K, V> extends AbstractMap<K, V>{ | ||
+ | ... | ||
public Set entrySet(); | public Set entrySet(); | ||
public int size(); | public int size(); | ||
public V put(K key, V value); | public V put(K key, V value); | ||
+ | .... | ||
+ | } | ||
</code> | </code> | ||
Line 29: | Line 42: | ||
=== Problema 2 === | === Problema 2 === | ||
- | Definiți clasa **//Catalog//** care moștenește clasa **//TreeSet//**, specificând tipul **//Student//** pentru elementele din colecție. Clasa **//Student//** este definită în interiorul clasei **//Catalog//**, implementează interfața **//Comparable//** și conține următoarele câmpuri: un **//String//** //name//, pentru reținerea numelui studentului, un **//double//** //media//, | + | Definiți clasa **//Catalog//** care moștenește clasa **//TreeSet//**, specificând tipul **//Student//** pentru elementele din TreeSet. Clasa **//Student//** este definită în interiorul clasei **//Catalog//**, implementează interfața **//Comparable//** și conține următoarele câmpuri: un **//String//** //name//, pentru reținerea numelui studentului, un **//double//** //media//, |
pentru medie, și un **//int//** //clazz// pentru reținerea numărului grupei din care face parte studentul. Compararea a doi studenți se realizează în funcție de medie (crescător), iar dacă acestea sunt egale, se realizează o sortare alfabetică. | pentru medie, și un **//int//** //clazz// pentru reținerea numărului grupei din care face parte studentul. Compararea a doi studenți se realizează în funcție de medie (crescător), iar dacă acestea sunt egale, se realizează o sortare alfabetică. | ||
+ | Se va defini si metoda toString! | ||
Clasa trebuie să pună la dispoziție metode pentru următoarele operații: adăugarea unui student, căutarea unui student după nume (va returna null dacă nu există un student cu numele indicat în colecție), ștergerea unui student din catalog (primește ca parametru numele studentului), ordonarea alfabetică a studenților dintr-o grupă, primită ca parametru. | Clasa trebuie să pună la dispoziție metode pentru următoarele operații: adăugarea unui student, căutarea unui student după nume (va returna null dacă nu există un student cu numele indicat în colecție), ștergerea unui student din catalog (primește ca parametru numele studentului), ordonarea alfabetică a studenților dintr-o grupă, primită ca parametru. | ||
Line 41: | Line 55: | ||
public Catalog ( ) ; | public Catalog ( ) ; | ||
- | public void addStudent(String name, float media, int clazz); | + | public void addStudent(String name, double media, int clazz); |
public Student getStudent ( String name) ; | public Student getStudent ( String name) ; | ||
public void removeStudent ( String name) ; | public void removeStudent ( String name) ; | ||
Line 49: | Line 63: | ||
=== Problema 3 === | === Problema 3 === | ||
- | Definiți clasa generică **//LinkedList//** care va implementa interfața **//Iterable//** și va modela o listă liniară simplu înlănțuită. | + | Definiți clasa **__generică__** **//LinkedList//** care va implementa interfața **//Iterable//** și va modela o listă liniară simplu înlănțuită: |
+ | class LinkedList<T> implements Iterable<T> | ||
În clasa **//LinkedList//** se vor defini: | În clasa **//LinkedList//** se vor defini: | ||
- | * o clasă internă privată statică **//Node//** care conține două referințe: una pentru valoarea pe care o reține nodul și una pentru nodul următor din listă; și doi constructori: unul cu doi parametri (valoarea și nodul următor) și unul cu un parametru (valoarea) - va atribui valoarea null nodului următor; | + | * o clasă **//generica//** internă privată statică **//Node//** |
+ | <code> private static class Node<T> </code> | ||
+ | care conține două referințe: una pentru valoarea pe care o reține nodul și una pentru nodul următor din listă; și doi constructori: unul cu doi parametri (valoarea și nodul următor) și unul cu un parametru (valoarea) - va atribui valoarea null nodului următor; | ||
* două elemente de tip **//Node//**, reprezentând primul și respectiv ultimul element din listă; | * două elemente de tip **//Node//**, reprezentând primul și respectiv ultimul element din listă; | ||
- | * o clasă internă **//ListIterator//** ce va implementa interfața **//Iterator//**; | + | * o clasă internă **//ListIterator//** ce va implementa interfața generica **//Iterator//**; |
* metodele prezentate în blocul de cod de mai jos. | * metodele prezentate în blocul de cod de mai jos. | ||
Line 62: | Line 79: | ||
//Insereaza un nod la sfarsitul listei | //Insereaza un nod la sfarsitul listei | ||
public void add(T data); | public void add(T data); | ||
- | //Returneaza primul nod din lista | ||
- | public T getNode(); | ||
//Returneaza un obiect de tip ListIterator | //Returneaza un obiect de tip ListIterator | ||
public Iterator<T> iterator(); | public Iterator<T> iterator(); | ||
Line 100: | Line 115: | ||
</code> | </code> | ||
</note> | </note> | ||
- | |||
- | {{:poo:laboratoare:lab8.zip|Arhiva laborator}} |