Les collections - Université Lyon 2

Transcription

Les collections - Université Lyon 2
Les collections (1)
API Java sur
les collections
Master Informatique 1ère année
Julien Velcin
http://mediamining.univ-lyon2.fr/velcin
Objectif :
Permet de stocker un ensemble de données.
Tableaux statiques (int [] tab) peu performants
â Collection = gestion dynamique
Différents types de collections :
Ensemble (Set) | Tableaux associatifs (Map) | Liste (List)
public class Alcool {
private double degre;
private String nom;
public Coktail melanger(JusDeFruit jus);
}
Les collections (2)
1. Les ensembles :
•  objets de même type
•  sans duplication
â HashSet : non triée
â TreeSet : triée
Ex. : ensembles d alcools.
Vin Porto Bière Vodka
Bière Vin Porto Vodka
Vin Porto Bière Vodka Chocolat
Les collections (3)
2. Les listes :
•  objet de types différents
•  duplication possible
â LinkedList : liste chaînée
â ArrayList | Vector : tableaux
Vin Porto Bière Vodka Chocolat
Bière Vin Porto Vodka Vin Chocolat
Bière Vin Porto Vodka Vin
∅
Les collections (4)
3. Les tableaux associatifs :
•  clefs / valeurs
•  clefs sans duplication
â HashMap | TreeMap
Trié
Numéro de
commande
C1
V1
La classe Vector (1)
Rappel :
o  liste d objets, non trié, avec duplication possible.
Ci
Vi
1. Gestion de la mémoire :
•  capacité de la liste (défaut : 10)
•  pas d incrémentation (défaut : 0)
•  augmentation de la capacité par le pas lorsque le Vecteur est
plein.
Trié
1
2
3
v
…
Bière Vin Porto Vodka Vin Chocolat
v
v
v
La classe Vector (2)
Syntaxe :
2. Méthodes : ajout
boolean est_ajoute = v.add(vin);
Vector v = new Vector();
Vector v = new Vector(capacite);
Vector v = new Vector(capacite, pas);
v
vin
v.add(3, vin);
NULL
v
v
Vide
v
La classe Vector (3)
vin
vin
3. Méthodes : index
Alcool a = (Alcool)(v.get(3));
a
«vin»
12
v.set(vodka, 3);
v
v
vodka
vin
La classe Vector (4)
La classe Vector (5)
4. Méthodes : suppression
•  Parcourir un vecteur :
boolean est_supprime = v.remove(vin);
v
for (int i=0; i<v.size(); i++)
{
Alcool a = (Alcool)(v.get(i));
System.out.println("Alcool " + i + "
+ a );
}
vodka
Alcool a = (Alcool)( v.remove(3));
v
a
«vodka»
•  Et mieux depuis Java 1.5 :
40
for (Alcool a : v)
{
System.out.println("Alcool " + i + "
+ a );
}
La classe Vector (6)
•  En réalité, la classe Vector est
déconseillée car deprecated
La classe TreeSet (1)
Rappels :
o  ensemble d objets de même type, triés et sans duplication.
o  peut comporter une instance null.
Syntaxe :
TreeSet t = new TreeSet();
•  Utiliser à la place la classe ArrayList
.
t
La classe TreeSet (2)
La classe TreeSet (3)
public class Alcool {
public double degre;
public String nom;
les_alcools
TreeSet les_alcools = new TreeSet();
les_alcool.add(vodka);
public Coktail en_melangeant(JusDeFruit jus);
}
les_alcools
vodka
les_alcools
vin
Alcool vodka = new Alcool();
vodka.nom = "vodka";
vodka.degre= 40;
Alcool porto = new Alcool();
porto.nom = "porto";
porto.degre= 18;
«vin»
12
«vodka»
40
vodka
les_alcool.add(porto);
System.out.println(les_alcool.size());
2
premier = les_alcool.first();
premier
«vin»
12
dernier = les_alcool.last();
dernier
«vodka»
40
porto
«porto»
18
les_alcool.remove(vin);
les_alcools
les_alcools
•  Depuis Java 1.5 :
vin vodka
les_alcools
vin porto vodka
Iterator it=les_alcool.iterator();
while (it.hasNext())
{
Alcool al = (Alcool)(it.next());
System.out.println(al.nom);
}
vodka
Eviter le transtypage :
les types génériques
La classe TreeSet (4)
les_alcool.add(vin);
vin vodka
les_alcool.add(vin);
… main(…) {
Alcool vin = new Alcool();
vin.nom = "vin";
vin.degre= 12;
Affichage :
Vin
Porto
Vodka
Iterator ne connaît pas Alcool.
mais it.next() renvoie un Object de l ensemble.
ici, cet Object est un Alcool.
(Alcool)(it.next()) modifie le type de it.next() de Object à Alcool.
Vector<MaClasse> liste;
(...)
liste = new Vector<MaClasse>(100);
(...)
for (int i=0; i<liste.size(); i++)
{
MaClasse = liste.get(i);
(...)
}
Exemple d interface (1)
Question : comment le TreeSet sait-il trier les alcools ?
Réponse : Il ne sait pas ; il faut donc le lui indiquer.
Exemple d interface (2)
public class Alcool implements Comparable {
public double degre;
public String nom;
Solution : le TreeSet propose un contrat :
Si une classe accepte de définir la méthode compareTo, le TreeSet
s engage à trier les objets de cette classe.
public Coktail en_melangeant(JusDeFruit jus) {…}
public int compareTo(Object o) {
Alcool a_comparer = (Alcool)o;
if (degre < a_comparer.degre)
return -1;
else if (degre > a_comparer.degre)
return 1;
else
return 0;
}
Contrat â interface
Terme du contrat â méthodes à implémenter
Exemple :
interface comparable
méthode compareTo(Object o)
}