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