Documente Academic
Documente Profesional
Documente Cultură
Colecțiile sunt tipuri de date ce conțin mai multe date de același tip
sau de un tip diferit.
Știm că șirul este un tip de dată ce conține un set de alte date în cadrul
său. Șirul poate accepta numai date de același tip și numai numărul de
date specificat în timpul inițializării șirului. Mai precis, dimensiunea
unui șir nu se poate modifica după inițializarea sa și nu se pot stoca
mai multe tipuri de date în cadrul unui șir. Aceste limitări sunt
rezolvate printr-o abordare diferită, ce implică existența unui obiect ce
conține alte obiecte interconectate prin referințe. Acesta permite
manipularea simplă a structurii, fiindcă putem șterge foarte simplu un
obiect din listă prin înlăturarea referinței sale sau putem adăuga un
obiect prin adăugarea unei referințe. În plus, o astfel de structură, dat
fiind faptul că este o structură obiectuală, va fi stocată în partea
dinamică a memoriei (heap) și nu vom fi limitați de dimensiunea
acestei structuri.
căutarea obiectelor,
Framework-ul Collection
Privind cele două imagini de mai sus, putem vedea că există patru
forme diferite ale colecțiilor:
List
Set
Map
Queue
După cum am menționat deja, Java are mai multe clase predefinite și
obiectivul nostru este să aflăm mai multe despre unele dintre aceste
clase de bază.
Lists
myList.add("my");
myList.add("name");
myList.add("is...");
Este evident faptul că putem adăuga elemente într-o listă creată astfel
fără ca mai întâi să fie nevoie să definim dimensiunea listei, ceea ce
înseamnă că o astfel de listă poate avea o dimensiune nelimitată. Cu
toate acestea, acest lucru are un preț, fiindcă această abordare este
mai lentă decât realizarea prin intermediul unui șir. Trebuie observat
că List reprezintă interfaţa, iar ArrayList reprezintă implementarea
acestei interfeţe. O altă clasă ce implementează interfaţa List este
LinkedList, în acest caz obiectul colecţie fiind creat astfel:
System.out.println(myList.get(1));
myList.remove(1);
0: my
1: is...
0: my
1:
2: is...
for(int i=0;i<myList.size();i++)
System.out.println(myList.get(i));
O altă metodă de parcurgere a listei este printr-o buclp for each, astfel:
for(String s : myList)
System.out.println(s);
for(String s : myList)
System.out.println(s);
Listele pot accepta orice tip de date. Așadar, putem scrie în felul
următor:
for(Object s : myList)
System.out.println(s);
for(Object s : myList)
if(s.equals("name"))
System.out.println("Value exists");
System.out.println(myList.contains("name"));
Manual:
for(int i=0;i<myList.size();i++)
arr[i]=myList.get(i);
myList.clear();
Map
Mai există un tip comun de colecție în Java. Este vorba despre un șir de
perechi de chei și valori, respectiv un șir asociativ. Clasele care permit
utilizarea acestor colecții în Java moștenesc interfața Map. Într-o astfel
de structură, elementele șirului sunt identificate prin intermediul unei
anumite chei care le reprezintă. De exemplu, într-o colecție de
cetățeni, codul numeric personal este cheia, în timp ce datele (nume,
prenume, adresă) reprezintă valoarea pentru fiecare cetățean. Dacă
System.out.println(hashMap.get("1234567890124"));
De exemplu:
În exemplul următor, vom arăta logica din spatele creării unei colecții.
Cu alte cuvinte, vă vom arăta modul în care puteți crea dvs. înșivă o
clasă ce va reprezenta o colecție. Haideți să creăm mai întâi o clasă ce
va reprezenta elementele unei liste simple înlănțuită:
Exerciții
Exercițiul 1
...
...
Adăugați toți utilizatorii din lista usersToAdd în lista Users. Dacă există
deja un utilizator cu același ID, înlocuiți vechiul utilizator cu cel nou.
Soluția 1:
...
for(int i=0;i<usersToAdd.size();i++)
{
boolean userExists = false;
for(int u=0;u<users.size();u++)
{
if(((User)users.get(u)).Id==((User)usersToAdd.get(i)).Id)
{
users.set(u, (User)usersToAdd.get(i));
userExists=true;
}
}
if(!userExists)
users.add(usersToAdd.get(i));
else
userExists=false;
}
for(Object u : users)
System.out.println(((User) u).Id + ":" + ((User) u).name);
}
...
Soluția 2:
for(int i=0;i<users.size();i++)
{
for(int u=0;u<usersToAdd.size();u++)
{
if(((User)users.get(i)).Id==((User)usersToAdd.get(u)).Id)
users.remove(u);
}
}
users.addAll(usersToAdd);
Exercițiul 2
Soluția:
...
int min;
User tmp;
for (int i = 0; i < users.size(); i++) {
min = i;
for (int u = i; u < users.size(); u++) {
if (((User) users.get(u)).Id < ((User) users.get(min)).Id) {
min = u;
}
}
tmp = (User) users.get(min);
users.set(min, (User) users.get(i));
users.set(i, tmp);
}