cours - LISIC

Transcription

cours - LISIC
Concepts avancés
La classe ArrayList
La classe HashMap
le mot-clef enum
Aperçu
• Introduction au concept d'ArrayList. Ils sont similaires aux
tableaux mais beaucoup plus souples
• La classe HashMap est une table d'association (très
puissante en Java)
• Les classes « immutable » (String, Integer, Double,…)
• La classe StringBuffer
• Le mot-clef enum permettant de réaliser des énumérations
Introduction aux ArrayList
ArrayList<Employés> emps = new ArrayList<Employés>() ;
• Crée un ArrayList d'objets de types Employés. La taille de cet
ArrayList n'est pas spécifié
• ArrayList est une classe générique. Cela signifie qu'elle prend
en entrée (ici entre < et >) le nom d'une autre classe
• La définition ci-dessus crée une liste d'objets de type
Employés. Il sera possible d'y ajouter/enlever des objets.
Comme toujours, il faudra utiliser new pour créer un objet de
type Employés avant de l'ajouter
ArrayList est les types primitifs
ArrayList<int> a = new ArrayList<int>() ;
• ne fonctionne pas ! Il faut passer le nom d'une classe en
paramètre pas d'un type primitif
• Pour résoudre ce problème
ArrayList<Integer> a = new ArrayList<Interger>() ;
• Integer est appelé un wrapper de classe. Il y a des classes
similaires : Double, Character, Boolean,…
• Les classes « wrappers » sont immutable(s)
public class Test{
public static void inc(Integer i){
i++;
}
public static void main(String[] args){
Integer i=3;
inc(i);
System.out.println(i);// 3 sera affiché
}
}
import java.util.*;
class Test{
public static void inc(MyInteger i){
i.setValue(i.getValue()+1);
}
public static void main(String[] args){
MyInteger i = new MyInteger(3);
inc(i);
System.out.println(i);// 4 sera affiché
}
}
class MyInteger{
private int i;
public MyInteger(int i){
this.i = i;
}
public int getValue(){
return i;
}
public void setValue(int i){
this.i = i;
}
public String toString(){
return i+"";
}
}
L'interface de la classe ArrayList
• différent des tableaux « classiques »
• Pas de [ ]
• Pas de spécification de la taille
• La méthode size() retourne le nombre d'éléments de
l'ArrayList
• La méthode get(i) retourne l'élément à la position i (débute à
0). Attention, get(i) ne peut être utilisée pour modifier la liste
Insertion d'un élément
ArrayList<Employés> emps = new
ArrayList<Employés>();
emps.add(new Employés("John"));
Enlever un élément
• a.remove(3) ;//enlève l'élément à la position 3
• a.remove(o) ; //enlève la première occurrence de l'objet o, les
éléments suivants sont décalés
• Il est parfois difficile de distinguer les deux
import java.util.*;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> a = new ArrayList<Integer>();
for(int i = 0; i < 10; i++){
a.add(i+5);
}
a.remove(6); //élément à la position 6 or le nombre 6?
System.out.println(a);
}
}
Answer: Element at position 6!
Version alternative
import java.util.*;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> a = new ArrayList<Integer>();
for(int i = 0; i < 10; i++){
a.add(i+5);
}
a.remove(new Integer(6));
System.out.println(a);
}
}
Le nombre 6 cette fois
Modifier un élément
• a.set(3,nouvelle_valeur) ; / : modifié l'élément à la position 3
• Si l'élément à la position 3 n'existe pas (ie il n'y a pas 4
éléments), une exception est levée
• Il est nécessaire d'utiliser la méthode add pour ajouter un
nouvel élément avant d'utiliser la méthode set pour le modifier
• On ne peut ajouter un nouvel élément avec la méthode set
ArrayList<Integer> a = new ArrayList<Integer>();
for(int i = 0; i < 10; i++){
a.add(i);
}
a.set(3,10); //change le 4ème élément à 10
}
D'autres méthodes
• Documentation sur ArrayList
• http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.htm
l
La classe HashMap
• La classe HashMap permet d'implanter facilement une table
d'association qui est une structure très puissante
• La table d'association associe une clef à une valeur
• La clef et la valeur pouvant être des structures complexes
(comme des objets)
La classe HashMap
• Comme tout ce qui est Java, HashMap est une classe et
toutes les « HashMap » sont des instances (des objets) de la
classe HashMap
• Comment déclarer une HashMap
HashMap<String, Double> hm = new
HashMap<String ,Doublr>() ;
clef
valeur
La classe HashMap
• Utilisation de la classe HashMap
/* Ajout d'éléments à HashMap*/
•
hm.put("Zara", new Double(3434.34));
•
hm.put("Steve", new Double(123.22));
•
hm.put("Bill", new Double(1378.00));
•
hm.put("Daisy", new Double(99.22));
•
hm.put("John", new Double(-19.08));
La classe HashMap
• Récupérer des valeurs
• la méthode get(clef) permet de récupérer des valeur
/* récupérer une valeur à partir de la clef */
Double d = hm.get("John");
System.out.println(d);
System.out.println(hm.get("Bill"));
java TestHashMap
-19.08
1378.0
La classe HashMap
• Comment parcourir toutes les valeurs d'un objet HashMap ?
• c'est un peu plus comple