introducció a java collections
DESCRIPTION
Introducció a Java Collections en el mòdul de programació per als alumnes de Desenvolupament d'Aplicacions Web (DAW)TRANSCRIPT
Java
COLLECTIONS
UF4 - ProgramacióXavier Sala PujolarInstitut Cendrassos
En programació es fan servir arrays per guardar objectes del mateix tipus
Mida fixa
0 1 2 3
El paquet collections conté un grup d'objectes pensats per emmagatzemar-ne d'altres
java.util.collections
Dissenyats per ser eficients i per emmagatzemar qualsevol tipus de dades
Creixen i decreixen segons la quantitat de dades que contenen
12
24
S'hi treballa d'una forma comuna.
Caixa.add(Llapis)
Afegir un element
Caixa.remove(Llapis)
Treure un element
Caixa.contains(Llapis)
True
Cercar un element
Proporciona un mètode per saber-ne la mida
Caixa.size()
12
Quants elements hi
ha?
Caixa.clear()
Buidar la col·lecció
Caixa.isEmpty()
True
Comprovar l'estat
Collections defineix interfícies per emmagatzemar les dades de diferents formes
Map
SortedMap
Collections
List Queue Set
SortedSet
Interfícies
Iterator
Deque
Les interfícies no es poden crear perquè només són especificacions
CAIXA
Considerarem «Caixa» als objectes que permetin posar-hi altres objectes a dins i tinguin tapa
Però a Collections també hi ha implementacions de les interfícies
CAIXA
List: Permet emmagatzemar una llista seqüencial d'objectes
0 1 2 3
List
ArrayList
Vector
LinkedList
Stack
Queue i Deque: Permeten emmagatzemar una llista d'objectes però que funcionen com una cua
Queue
LinkedList
PriorityQueue
Deque
ArrayDeque
Set: Permet emmagatzemar una col·lecció d'objectes sense repeticions
Set
HashSet
LinkedHashSet
EnumSet
SortedSet
TreeSet
NavigableSet
Map: Permet emmagatzemar objectes amb una clau única per localitzar-los
Vermell Groc Blau Verd
Map
SortedMap
NavigableMap
HashMap TreeMap
LinkedHashMap
Localitzar elements
Les col·leccions disposen d'una funció per localitzar-hi objectes
boolean jaHiEs = llista.contains(c);
Cal que es puguin comparar
Poder comparar objectes també és important quan es volen eliminar
llista.remove(c);
Cal poder-lo reconéixer...
public boolean equals(Object o)
Funcionarà amb els objectes que implementin la funció equals
True
False
public boolean equals(Object o) { if(o == null) return false;
if(!(o instanceof) Llapis) return false;
Llapis other = (Llapis) o; return this.color == other.color;}
Ha de comprovar l'objecte amb qualsevol altre
La funció hashCode() es fa servir en col·leccions que fan servir Hash
public int hashCode()
Ha de retornar un valor
diferent per objectes diferents
Recórrer una col·lecció
Totes les col·leccions es poden recórrer de la mateixa forma
for iterators
For loop forEach
Però amb varies possibilitats
List<Caixa> caixes = new ArrayList<Caixa>();
...
for (int i=0; i < caixes.size(); i++) { System.out.println(caixes.get(i))}
Bucle for...
List<Caixa> caixes = new ArrayList<Caixa>();
...
for (Caixa c: caixes) { System.out.println(c)}
Bucle for...loop
Els iteradors són objectes que es fan servir per recórrer col·leccions
No es poden reciclar
List<Caixa> caixes = new ArrayList<Caixa>();
... iterator<Caixa> it = caixes.iterator();while (it.hasNext()) { Caixa c = iter.next(); System.out.println(c)}
Iteradors
List<Caixa> caixes = new ArrayList<Caixa>();
... Caixes.forEach(System.out::println);
Funció forEach()
Ordenar una col·lecció
Les col·leccions es poden ordenar fent servir Collections.sort()
Els objectes a ordenar han d'implementar Comparable
public class Caixa implements Comparable<Caixa> {
Sóc Comparable!
Que obliga a implementar el mètode compareTo(Caixa o)
Sóc més petita: -1
Sóc més gran: +1
Es pot fer servir qualsevol aspecte de l'objecte per ordenar
getPes()
getContingut()
getAltura()
Collections.sort(caixes);
Per ordenar per criteris diferents al predefinit es fa servir un Comparador
Un objecte que
determinarà l'ordre
public class Comparador implements Comparator<Caixa> {
L'objecte comparador ha d'implementar Comparator
Que li fa implementar el mètode:
compare(Caixa c1, Caixa c2);
-1
+1
Collections.sort(caixes, Comparador);
Des de Java8 el comparador no cal crear-lo explícitament
caixes.sort((u1, u2) -> u1.getPes() - u2.getPes());
8
010010001001010110110111101
Les col·leccions permeten obtenir Streams
Stream<Llapis> x = Caixa.stream()
8
Els Streams permeten treballar d'una forma diferent a com es feia fins ara
int total = Caixa.stream() .filter(x -> x.getPes() > 5) .count();
8
I també es pot fer servir per ordenar Collections...
caixes.stream() .sorted((e1, e2) -> Integer.compare(e1.getPes(), e2.getPes())) .forEach(System.out::println);
8
Desenvolupament d'Aplicacions Web
Les imatges són de OpenClipart o meves
Versió 1 - 2014