Vous êtes sur la page 1sur 49

Module M15

La programmation orientée objet JAVA


Chapitre 7

Les collections
Programmation Orientée Objets avec JAVA
Les Collections

Plan du cours
1. Définition d’une collection
2. Les interfaces de collection
3. Les classes abstraites de collection
4. Les classes concrètes de collection
5. Les classes utilitaires
6. Exemple et exercices de mise en œuvre
7. Exemple de collections composées

3
Tableau

1 13 -1 . . . . 1 Tableau d’entiers

Obj Obj Obj . . . . Obj Tableau d’objets

• Le type contenu est connu


• La taille du tableau est connue (tab.length)

• Ne contient qu’un seul type de données


• La taille des tableaux est fixée
4
Qu’est ce qu’une Collection

Une collection est un Objet dont la principale


fonctionnalité et de contenir d’autres Objets, comme
un tableau.

. . . . Collection

5
Qu’est ce qu’une Collection

Le JDK fournit plusieurs types de collections sous la


forme de: interfaces, classes abstraites et classes
concrètes

Ces classes et interfaces sont dans le package java.util

6
Qu’est ce qu’une Collection

Avant JDK 5.0 Conteneur<Object>

Les types contenus dans une collection sont de type Object

À partir de JDK 5.0 Conteneur<Etudiant>

Le concept de la généricité a été introduit

7
Les Interfaces

• Deux hiérarchies d’héritage principales


(1) (2)
<<interface>>
<<interface>>
Iterable <E>
Map <K,V>

<<interface>>
Collection<E> . . .

. . .
8
Les Interfaces

• Les Collections

(1)

9
Les Interfaces

• Les Collections

public interface Collection {


// Basic Operations
int size();
boolean isEmpty();
boolean contains(Object element);
boolean add(Object element);
boolean remove(Object element);
Iterator iterator();
// Bulk Operations
boolean containsAll(Collection c);
boolean addAll(Collection c); // Optional
boolean removeAll(Collection c); // Optional
boolean retainAll(Collection c); // Optional
void clear();
// Array Operations
Object[] toArray();
Object[] toArray(Object a[]);
}

1
Les Interfaces

• Les Maps

(2)

1
Les Classes abstraites

• Implémente les méthodes de base des interfaces Collection et Map


• Factorise le code commun à plusieurs types de collections
• Fournir une base pour les classes concrètes de JDK et aux classes
implémentées par le programmeur
1
Les Classes concrètes

• Ajoutent les supports concrets qui vont recevoir les objets de


collections

• Elles implémentent les principales méthodes d’accès à ces


objets
• put
• get
• add
• isEmpty
• remove
13 •…
Les Classes concrètes

Interfaces Classes d’implémentation de tableaux

Set<E>
List<E> ArrayList<E>
Map<K,V>
Queue<E> ArrayDeQueue<E>

14
Les Classes concrètes

Interfaces Classes d’implémentation de tables de hachage

Set<E> HashSet<E>
List<E>
Map<K,V> HashMap<K,V>
Queue<E>

15
Les Classes concrètes

Interfaces Classes d’implémentation d’arbres balancés

Set<E> TreeSet<E>
List<E>
Map<K,V> TreeMap<K,V>
Queue<E>

16
Les Classes concrètes

Interfaces Classes d’implémentation de listes chainées

Set<E>
List<E> LinkedList<E>
Map<K,V>
Queue<E> LinkedList<E>

17
Les Classes concrètes

18
Les Classes concrètes

1
Les Classes concrètes

2
Les Classes utilitaires

• La classe Collections: fournit des méthodes static pour:


• Trier une collection public static void sort(List<T> list)

• Faire des recherches rapides sur une collection triée


•…
• La classe Arrays: fournit des méthodes static pour:
• Trier un tableau {public static void sort(int[] a);}
• Faire des recherches rapides sur un tableau trié
• Transformer un tableau en une liste
•…

2
Les Collections du JDK1.1

• Ces collections sont:


• Vector
• HashTable
• Enumeration

2
Les Collections

Exemples et exercices de
mise en œuvre des
Collections et maps

2
Les Collections
Code java de List
public interface List extends Collection {
// Positional Access
Object get(int index);
Object set(int index, Object element); // Optional
void add(int index, Object element); // Optional
Object remove(int index); // Optional
boolean addAll(int index, Collection c); // Optional
// Search
int indexOf(Object o);
int lastIndexOf(Object o);
// Iteration
ListIterator listIterator();
ListIterator listIterator(int index);
// Range-view
List subList(int fromIndex, int toIndex);
2 }
L’interface List et la classe ArrayList

public class Liste1 {


public static void main(String arg[]){
List<String> list1= new ArrayList();
list1.add("Ali");
list1.add("Baba");
list1.add("Tata");
list1.add("Dadi");
list1.add("Baba"); Exécution
System.out.println(list1); [Ali, Baba, Tata, Dadi, Baba]
tri
System.out.println(‘’tri’’);
[Ali, Baba, Baba, Dadi, Tata]
Collections.sort(list1);
System.out.println(list1);
}
}
2
L’interface List et la classe ArrayList

Soit la classe Etudiant suivante:


public class Etudiant {
public class ListeEtudiant {
private String nom;
public static void main(String arg[]){
private String prenom; List<XX> list2 = new ArrayList();//7
private int age; Etudiant e1=new Etudiant("A","A",1);
public Etudiant(String n,String p, int a){ Etudiant e2=new Etudiant("Y","Z",2);
nom=n; Etudiant e3=new Etudiant("D","E",3);
prenom=p; Etudiant e4=new Etudiant("M","N",4);
age=a; Etudiant e5=new Etudiant("E","F",5);
list2.add(e1); list2.add(e2); list2.add(e3);
}
list2.add(e4); list2.add(e5);
} System.out.println(list2);//ligne 15
}

Questions:
1) Quelle est la valeur de XX dans la ligne 7
2) Quel est le résultat affiché par: System.out.println(list2); de la ligne 15
3) Quelles sont les modifications à apporter au programme pour obtenir le
résultat suivant: [{A A 1}, {Y Z 2}, {D E 3}, {M N 4}, {E F 5}]
3) Trier les étudiants par nom
2 4) Quelles sont les conclusions que vous pouvez faire ?
Comparator et Comparable
de la classe utilitaire Collections
Pour trier les étudiants selon un critère
import java.util.Comparator;
public class Etudiant implements Comparable<Etudiant>,
Comparator<Etudiant>{ public class ListeEtudiant {
public static void main(String arg[]){
[….] [….]
Tri par nom
public int compareTo(Etudiant et) {
//méthode de l'interface Comparable<Etudiant> Collections.sort(list2);
return (this.nom).compareTo(et.nom); System.out.println(list2);
}

public int compare(Etudiant et1, Etudiant et2) { Tri par age


//méthode de l'interface Comparator<Etudiant>
return et1.age- et2.age; Collections.sort(list2,new Etudiant());
} System.out.println(list2);
}

2
Parcours de ArrayList

Parcours à l’aide d’un itérator


public class ListeEtudiant {
public static void main(String arg[]){
List<Etudiant> list2 = new ArrayList();
[…]
Iterator<Etudiant> itr = list2.iterator();
while (itr.hasNext()) {
Etudiant et = itr.next();
System.out.println(et);
}
}

2
Parcours de ArrayList

Parcours sans iterator


public class ListeEtudiant {
public static void main(String arg[]){
List<Etudiant> list2 = new ArrayList();
[…]
for(Etudiant et: list2)
System.out.println(et);
}

public class ListeEtudiant {


public static void main(String arg[]){
List<Etudiant> list2 = new ArrayList();
[…]
for(int i=0;i<list2.size();i++)
System.out.println(list2.get(i]);
}

2
List et Arrays

Examiner le code suivant


import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
public class TestArrayAsList {
public static void main(String[] args) {
String[] strs = {"alpha", "beta", “gama"};
System.out.println(Arrays.toString(strs));

List<String> lst = Arrays.asList(strs);


System.out.println(lst);

strs[0] += "88";
lst.set(2, lst.get(2) + "99");
System.out.println(Arrays.toString(strs));
System.out.println(lst);

List<Integer> lstInt = Arrays.asList(22, 44, 11, 33);


System.out.println(lstInt);
}
}
3
Quelques méthodes de ArrayList

Vous pouvez les découvrir vous-même à


l’aide de l’IDE Eclipse

3
L’interface List et la classe LinkedList

La classe LinkedList représente une liste chainée

Image de openClassRoom

L’affichage d’une liste chainée fonctionne de la même manière qu’une


ArrayList

3 Vous pouvez découvrir vous-même les autres méthodes


Les Collections

Exemples et exercices de
mise en œuvre des
Collections et maps

3
L’interface Set
et les classes HashSet et LinkedHashSet
Set
• Elle permet de modéliser un ensemble d’objets sans doublons.
• Ceci est garanti vu que tous les objets ont la méthode equals
• La méthode add(T e) échoue si e existe déjà dans l’ensemble

Quelques opérations entres les Set

set1 UNION set2  set1.addAll(set2)


set1 INTERSECTION set2 set1.retainAll(set2)
set1 - set2  set1.removeAll(set2)
3
L’interface Set
et les classes HashSet et LinkedHashSet
HashSet
• Elle fonctionne avec une table de hashage
• Ses clés sont les codes de hashage des
objets ajoutés
• Les valeurs sont les objets ajoutés
• Pour une bonne mise en œuvre, les
méthodes equals et hashcode doivent être
bien implémentées.
3
L’interface Set
et les classes HashSet et LinkedHashSet
Utilisation de HashSet (1)
Le résultat du programme
// dans une méthode main
// création du set J'ajoute un : true
Set<String> set = new HashSet<String>() ; J'ajoute deux : true
// ajout d'élément
System.out.println("J'ajoute un : " + set.add("un")) ; J'ajoute encore un : false
System.out.println("J'ajoute deux : " + set.add("deux")) ; Taille du set : 2
// ajout d'un doublon : échec
System.out.println(" j’ajoute encore un: " + set.add("un")) ;
// affichage de la taille du set
System.out.println("Taille du set : " + set.size()) ;

3
L’interface Set
et les classes HashSet et LinkedHashSet
Exercice 1 public class ListeEtudiant {
Soit la classe Etudiant suivante: public static void main(String arg[]){
public class Etudiant { Set<Etudiant> set1 = new
HashSet<Etudiant>();
private String nom; Etudiant e1=new Etudiant("A","A",1);
private String prenom; Etudiant e2=new Etudiant("B","Z",2);
private int age; Etudiant e3=new Etudiant("C","E",3);
public Etudiant(String n,String p, int a){ Etudiant e4=new Etudiant("A","N",4);
nom=n; Etudiant e5=new Etudiant("X","F",5);
prenom=p; set1.add(null);
age=a; set1.add(e1); set1.add(e2); set1.add(e3);
set1.add(e4); set1.add(e5); set1.add(null);
} System.out.println(set1);//ligne 15
public boolean equals(Object o) {
if (!(o instanceof Etudiant)) {
Questions:
return false;
}
1) Quel est le résultat affiché par:
return this.nom .equals(((Etudiant)o).nom); System.out.println(set1); de la ligne 15
} 2) Conclusions?
public int hashCode() { 3) Créer un autre HashSet set2, et faites
return nom.hashCode(); les opérations d’union, de soustraction,
} et d’intersection
} Remplacer HashSet par LinkedHashSet puis
3
Par TreeSet et exécuter le programme!!
Les Collections

Exemples et exercices de
mise en œuvre des
Collections et maps

3
Mapping entre les ensembles

Besoin:
Faire un mapping entre les éléments d’un ensemble
vers un autre ensemble

Exemple: mapper les personnes vers leurs numéros de


téléphone
“Ahmed ali" --> “00212 661121212"
“Ilham benchikh" --> " 00212 663171717"

Comment faire à l’aide des Lists ou des Sets?


Nous avons des indices (int) et personnes<Personne>
Comment trouver un numéro de téléphone en
précisant le nom d’une personne?
3
Une nouvelle collection: Map

Définition
une collection non ordonnée qui associe un ensemble de
valeurs d'éléments avec un jeu de clés afin que les éléments
peuvent être trouvés très rapidement (Complexité:O (1))

Chaque clé peut apparaître au plus une fois (pas de clés en double)
Une clé est mappée à au plus une valeur
les principales opérations:
put(key, valeur) : "Mapper key vers valeur.“
get(key): “Quelle valeur correpond à key"

4
Map

Code source de l’interface Map


public interface Map {
Object put(Object key, Object value);
Object get(Object key);
Object remove(Object key);
boolean containsKey(Object key);
boolean containsValue(Object value);
int size();
boolean isEmpty();
void putAll(Map map);
void clear();
Set keySet();
Collection values();
}

4
Les Classes concrètes

4
Map

Exemple 1
HashMap grades = new HashMap();
grades.put("Martin", "A");
HashMapEntry
grades.put("Nelson", "F");
grades.put("Milhouse", "B");

// What grade did they get? "Martin" "A"


HashMap
System.out.println(
grades.get("Nelson")); 0 HashMapEntry
System.out.println(
grades.get("Martin"));
2 "Nelson" "F"
grades.put("Nelson", "W");
grades.remove("Martin"); HashMapEntry

System.out.println(
grades.get("Nelson"));
5 "Milhouse" "B"
System.out.println(
grades.get("Martin"));
4
Les Maps

Exemple 2
public static void main(String arg[]){ Le résultat du programme
String tab[]={"A B", "C D", "H I", "M N", "M
N"}; A B , null
Map<String, Integer> map1=new C D , null
HashMap<>(); H I , null
int val=0; M N , null
for (String s : tab){ MN,3
Integer z=map1.get(s); {M N=4, H I=2, C D=1, A B=0}
System.out.println(s+ " , "+z); {M N=4, H I=2, C D=5, A B=0}
map1.put(s, val); {M N=4, H I=5, C D=5, A B=0}
val=val+1;
}
System.out.println(map1);
map1.put("C D", val);
System.out.println(map1);
map1.put("H I", val);
System.out.println(map1);
}
4
Les Maps

Exercice
Soit le tableau de chaines de caractères suivant:

String tab[]={"A B", "C D", "H I", "M N", "M N", "A B", "H I", "A B", "C D" };

Ecrit un programme en utilisant l’interface Map et la classe HashMap pour


afficher pour chaque chaine de tab accompagnée de son nombre
d’apparition.
Exercice 2
Write a program to count words in a text file,
using a hash map to store the number of
occurrences of each word.

La sortie du programme doit être comme suit:

{M N=2, H I=2, C D=2, A B=3}


4
Les collections composées

Exemple 1
// map names to list of phone numbers
Map m = new HashMap();
m.put("Marty", new ArrayList());
...
ArrayList list = m.get("Marty");
list.add("253-692-4540");
...
list = m.get("Marty");
list.add("206-949-0504");
System.out.println(list);

[253-692-4540, 206-949-0504]

4
Les collections composées

Exemple 2
/ map names to set of friends
Map m = new HashMap();
m.put("Marty", new HashSet());
...
Set set = m.get("Marty");
set.add("James");
...
set = m.get("Marty");
set.add("Mike");
System.out.println(set);
if (set.contains("James"))
System.out.println("James is my friend");
{Mike, James}
James is my friend

4
Programmation Orientée Objets avec JAVA
Les Collections

4
Java Collections Framework

49

Vous aimerez peut-être aussi