User Tools

Site Tools


Problem constructing authldap
laboratoare:colectii
Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laboratoare:colectii [2019/01/06 17:15]
Laurentiu Stamate [Resurse]
laboratoare:colectii [2019/11/30 13:44] (current)
Florin Mihalache [Resurse]
Line 244: Line 244:
  
 ==Exerciţii== ==Exerciţii==
-  - (**1p**) Instanţiati o colecţie care sǎ **nu** permitǎ introducerea elementelor duplicatefolosind o implementare corespunzǎtoare din bibliotecă. La introducerea unui element existent, semnalaţeroare. Colecţia va reţine ''​String''​-uri şi va fi parametrizatǎ. +  - (**2p**) În scheletul de laboratoravețun fișier cu o clasă (Student), care are trei membri: ​name (String), surname ​(String), id (long) șaverageGrade ​(double- media unui student.  
-  - (**2p**) Creaţi ​o clasǎ ''​Student''​. +       ​* ​Clasa Student ​va implementa interfaț[[https://​docs.oracle.com/​en/​java/​javase/​12/docs/api/java.base/java/lang/Comparable.html|Comparable]]<​Student>​folosită la sortări, implementând metoda ​[[https://​docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/Comparable.html#compareTo(T)|compareTo]]. În metoda ​compareTostudenții vor fi comparațmai întâi după medieapoi după numele de familie, apoi dupa prenume (adică dacă doi studențau aceeași medieei vor fi comparați după numele ​de familie ​și dacă au același nume de familieatunci vor fi comparați după prenume)Recomandăm să suprascrieți metoda ​//toString//pentru ​a putea afișa datele despre ​un student
-    - Adǎugaţi urmǎtorii ​membri: +  - (**1p**Creați 5 obiecte de tip Student ​și adăugați-le într-un ArrayList, ​pe care să îl sortați (hint: ​[[https://​docs.oracle.com/en/java/javase/12/docs/api/java.base/​java/​util/​Collections.html#​sort(java.util.List)|Collections.sort]])apoi afisați conținutul din ArrayList
-       * **câmpurile** ''​nume'' ​(de tip ''​String''​şi ''​medie'' ​(de tip ''​float''​) +   - (**2p**) Adăugați ArrayList-ul definit la subpunctul anterior într-un PriorityQueue (hint: ​[[https://​docs.oracle.com/en/java/javase/12/​docs/​api/​java.base/java/util/​Collection.html#​addAll(java.util.Collection)|Collection.addAll]])care folosește un Comparator, unde elementele sunt sortate crescător după id (aici puteti folosi Long.compare ca să comparați două numere de tip long). 
-       * un **constructor** care îi iniţializeazǎ +  - (**1p**) Suprascrieți metodele ​//equals// și //hashCode// în clasa Student ​(hint: puteți folosi generatorul de cod din IntelliJ). 
-       ​* ​ metoda ''​toString''​. +  - (**2p**) ​Folosițun //HashMap<Student, LinkedList<​String>>//, ​în care se vor adăuga perechi de tipul (Studentlista de materii pe care le are studentul respectiv), iar apoi afisați conținutul colecției (hint: Map.Entry șentrySet()). 
-    -  Folosiţi codul de la **exerciţiul anterior** şi modificaţi-l astfel încât colecţia aleasǎ de voi sǎ reţinǎ obiecte de tip ''​Student''​. Testaţi prin adǎugare de elemente duplicateavând aceleaşvalori pentru toate câmpurile, instanţiindu-le,​ de fiecare datǎ, cu ''​new''​. Ce observaţi?​ +  - (**2p**) Extindeți clasa //​LinkedHashSet<​Integer>//​, cu o clasă în care se vor putea adăuga doar numere pareVor fi suprascrise metodele ​//add// și //addAll//, în așa fel încât să nu fie permise adăugarea de numere impare în colecțiePentru testare, adăugați numere pare și impareiar după aceea iterați prin colecție, folosind ​[[https://​docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/Iterator.html|Iterator]] (tipizat cu Integer) sau folosind forEach, afișând elementele ​din colecțieInlocuiți LinkedHashSet cu HashSet ​ce observațcu privire la ordinea de inserare a elementelor?​ Dar dacă ați înlocui cu TreeSet?
-    - Prelucraţi implementarea de mai sus astfel încât colecţia sǎ reprezinte o tabelǎ de dispersie, care calculează codul de dispersie al elementelor dupǎ un criteriu ales de voi (puteţi suprascrie funcţia **hashCode**). +
-       ​* ​În ''​Student''​ suprascrieți metoda ''​equals''​ astfel încât să se ţină cont de câmpurile clasei, şi încercaţi din nou. Ce observaţi?​ +
-    * //​Hint:// ​[[http://​docs.oracle.com/​javase/​8/​docs/​api/java/​util/​Set.html#​add(E)|Set.add]],​ [[http://​docs.oracle.com/javase/8/​docs/​api/​java/​lang/​Object.html#​equals(java.lang.Object)|Object.equals]], [[http://​docs.oracle.com/​javase/​8/​docs/​api/​java/​lang/​Object.html#hashCode()|Object.hashCode]] +
-   - (**2p**) Plecând de la implementarea exerciţiului anterior, realizaţi urmǎtoarele modificǎri:​ +
-     * Supraîncǎrcaţi,​ în clasa ''​Student'', ​metoda ​''​equals''​cu o variantǎ care primeşte un parametru ''​Student'',​ şi care întoarce întotdeauna ''​false''​. +
-     * Testaţi comportamentul prin crearea unei colecţii ce conţine instanţe de ''​Student''​ şiteraţi prin această colecţieafişând la fiecare pas ''​element.equals(element)''​ şi ''​((Object)element).equals(element)''​ (unde ''​element''​ este numele de variabilă ales pentru fiecare element al colecţiei). Cum explicaţi comportamentul observat? Dacă folosiţun iteratoracesta va fi şi el **parametrizat**. +
-  - (**3p**) Creați clasa ''​Gradebook'', ​de tip ''​Map'',​ pentru reţinerea studenţilor dupǎ medie: cheile sunt mediile ​și valorile sunt liste de studenți. Gradebook va menţine cheile **ordonate descrescǎtor**. Extindeţi o implementare potrivitǎ a interfeţei ''​Map''​care sǎ permitǎ acest lucru. +
-    - Caracteristicile clasei definite sunt: +
-      - Cheile pot avea valori de la 0 la 10 (corespunzǎtoare mediilor posibile). Verificați acest lucru la adăugare. +
-      - Valoarea asociată fiecǎrei chei va fi o listǎ (''​List''​) care va reţine toţi studenţii cu media rotunjitǎ egalǎ cu cheia. Considerǎcǎ un student are media rotunjitǎ 8 dacǎ media sa este în intervalul [7.50, 8.49]. +
-     - Implementați un [[http://docs.oracle.com/javase/8/​docs/​api/​java/​util/​Comparator.html|Comparator]] ​pentru ​stabilirea ordinii cheilor. Gradebook va primi un parametru de tip ''​Comparator''​ în constructor și îl va da mai departe constructorului clasei moștenite+
-     ​Definiţi în clasǎ metoda ''​add(Student)'',​ ce va adǎuga un student în lista corespunzǎtoare mediei lui. Dacǎ, în prealabil, nu mai existǎ niciun student cu media respectivǎ (rotunjitǎ),​ atunci lista va fi creatǎ la cerere. +
-    - Testați clasa: +
-      - instanțiați un obiect Gradebook ​și adăugați ​in el câţiva studenţi. +
-      ​iteraţi ​pe Gradebook şi sortaţi alfabetic fiecare listǎ de studenţi pentru fiecare notă. Pentru a sorta, se va folosi metoda ​[[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​util/​Collections.html#​sort-java.util.List-|Collections.sort]], ​iar clasa Student va implementa o interfață care specifică modul în care sunt comparate elementele+
-        clasa ''​Student''​ va implementa interfaţa ​[[http://​docs.oracle.com/​javase/​8/​docs/​api/​java/​lang/Comparable.html|Comparable]], suprascriind metoda [[http://​docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html#​compareTo(T)|compareTo]]+
-  - (**2p**) ​Creaţo clasǎ care moşteneşte ''​HashSet<Integer>''​. +
-    * Definiţi ​în aceastǎ clasǎ o variabilǎ membru ​care reţine numǎrul total de elemente ​adǎugate. Pentru a contoriza acest lucrusuprascrieți metodele ''​add''​ şi ''​addAll''​Pentru adǎugarea efectivǎ a elementelor,​ folosiţimplementǎrile din clasa pǎrinte ​(''​HashSet''​). +
-    Testaţi, folosind atât ''​add''​ cât şi ''​addAll''​. Ce observaţi? Corectaţi dacǎ este cazul. +
-    ​Modificaţimplementarea astfel încât ​clasa voastrǎ sǎ moşteneascǎ ''​LinkedList<​Integer>​''​. Ce observaţi? Ce **concluzii** trageţi? +
-    * Hint: [[http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html#​add(E)|Collection.add]], [[http://​docs.oracle.com/​javase/​8/​docs/​api/​java/​util/​Collection.html#​addAll(java.util.Collection)|Collection.addAll]]+
-    * Hint: implementarea ''​addAll'' ​din sursele pentru [[http://​grepcode.com/​file/​repository.grepcode.com/​java/​root/​jdk/​openjdk/​8u40-b25/​java/​util/​HashSet.java#​HashSet|HashSet]] ş[[http://​grepcode.com/​file/​repository.grepcode.com/​java/​root/​jdk/​openjdk/​8u40-b25/​java/​util/​LinkedList.java#​LinkedList|LinkedList]].+
 == Resurse == == Resurse ==
  
-* {{:​laboratoare:​colectii:​lab7-sol.zip|Soluție}} +* {{:​laboratoare:​colectii:​schelet-lab8-2019.zip|Schelet}} 
-<​html><​a class="media mediafile mf_pdf"​ href="/poo/laboratoare/colectii?​do=export_pdf">​PDF ​laborator</a></html>+* {{:​laboratoare:​colectii:​sol-lab8-2019.zip|Soluție}} 
 +[[laboratoare:​old-exercises#​colectii|Exerciții din alți ani]] 
 + 
 +== Linkuri utile == 
 +* [[https://www.baeldung.com/java-8-streams|Streams]],​ introduse din Java 8, pot fi folosite și pentru a aplica operații pe colecții. Nu le folosim momentan la laborator ​însă le puteți utiliza la teme: 
 +   * [[https://www.geeksforgeeks.org/​stream-in-java/​|Java streams]] 
 +   * [[https://​www.geeksforgeeks.org/​stream-filter-java-examples/​| Filter streams examples]]
laboratoare/colectii.1546787726.txt.gz · Last modified: 2019/01/06 17:15 by Laurentiu Stamate