introducció a java collections

Post on 18-Dec-2014

108 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

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

top related