0% ont trouvé ce document utile (0 vote)
13 vues58 pages

Cours Java3 Collections

Transféré par

sarrasarrour564
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
13 vues58 pages

Cours Java3 Collections

Transféré par

sarrasarrour564
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 58

Programmation orientée objet

Langage Java

Sonia Kefi

2ème LI
Année Universitaire : 2024-2025
Les objectifs

✓ Collections

✓ Maps

✓ Utilitaires :
• trier une collection
• parcourir une collection
• chercher une information dans une liste triée

2
Rappel sur l’héritage
EtreHumain
• L'héritage multiple, une
Herbivore Carnivore
classe peut hériter en même
temps de plusieurs super
classes.
Lapin Homme Lion

Ce mécanisme n'existe pas en Java!!

Solution : Les interfaces

3
Interface : Présentation

• Une interface est un modèle pour une classe

• Une interface est un ensemble de déclarations de


méthodes abstraites.

• Les interfaces ressemblent aux classes abstraites car


elles contiennent des méthodes expliquant certains
comportements sans les implémenter.
4
Interface : Présentation
«interface»
Frome
«interface»
Dessinable caclulSurface()
dessiner(Graphics g) effacer(g: Graphics)
effacer(Graphics g)

Triangle Cercle
Int x, y; Int d,r;
dessiner(Graphics g) dessiner(Graphics g)
effacer(Graphics g) effacer(g: Graphics g)

• Toutes les classes qui implémentent cette interface possèdent les méthodes
et les constantes déclarées dans celle-ci.
• Plusieurs interfaces peuvent être implémentées dans une même classe.
5
Héritage d’interfaces

• De la même manière qu'une classe peut avoir des sous-classes,


une interface peut avoir des "sous-interfaces".
• Une sous-interface :
– Hérite toutes les méthodes abstraites et des constantes de sa « super-
interface ».
– Peut contenir de nouvelles constantes et méthodes abstraites.

6
Héritage d’interfaces

• A la différence des classes, une interface peut étendre plus d'une


interface à la fois.

7
Les Collections
Collections : Présentation

• Une collection est un objet qui contient d'autres objets.

• Ces objets proposent une solution au stockage de données


et permettent de faire des manipulations.

• Les classes et les interfaces se trouvent dans le package :


java.util.

9
Avantages

• Les collections permettent de :


- Améliorer la qualité et la performance des applications.
- Gérer un ensemble d'objets de types différents.
• Les collections sont utilisées pour :
- stocker, rechercher et manipuler des données.
- transmettre des données d’une méthode à une autre.
• Exemples :
- un dossier de courrier : collection de mails
- un répertoire téléphonique : collection de noms et de numéros de
téléphone.

10
Collections : Architecture

• Elle est composée de 3 parties :

– Une hiérarchie d'interfaces permettant de représenter les


collections sous forme de types abstraits.

– Des implémentations de ces interfaces.

– Implémentation de méthodes liées aux collections (recherche,


tri, etc.).
11
Collections : Architecture

12
Collections : Hiérarchie

• Deux hiérarchies principales :

– Collection

– Map : collections indexées


par des clés

13
Collections : Implémentation
• Le framework fournit les implémentations suivantes des
différentes interfaces:

• Il n'y a pas d'implémentation de l'interface Collection. Pour Set et Map


l'implémentation est soit sous la forme d'une table de hachage
(HashSet/HashMap) ou bien sous la forme d'un arbre
(TreeSet/TreeMap).
• Pour la liste: soit sous la forme de tableau (ArrayList) ou une liste
chaînée (LinkedList). 14
Interface Collection

• Un objet qui est un groupe d'objets.

• Principales méthodes :

boolean add(Object obj)


boolean contains(Object obj)
boolean containsAll(Collection collection)
Iterator iterator()
int size()
Object[] toArray()
Object[] toArray(Object[] tableau)
15
Interface Collection

16
SET
Set<E>

• Set : est un ensemble ne contenant que des valeurs et ces valeurs ne sont
pas dupliquées.

Par exemple : l'ensemble A = {1,2,4,8}. Set hérite donc de Collection, mais


n'autorise pas la duplication.

• Un ensemble (Set) est une collection qui n'autorise pas l'insertion de


doublons.

• SortedSet est un Set trié.

18
Exemple

SetTrie

//Afficher par ordre alphabétique

19
Set<E>

• Méthodes de Set<E>
– La méthode add n’ajoute pas un élément si un élément égal est déjà dans l’ensemble.
• Set : TreeSet et HashSet
• C'est une interface identique à celle de Collection. Deux implémentations
possibles:
– TreeSet : les éléments sont rangés de manière ascendante (triés).
– HashSet : les éléments sont rangés suivant une méthode de hachage
• Le choix entre ces deux objets est lié à la nécessité de trier les éléments :
– les éléments d'un objet HashSet ne sont pas triés : l'insertion d'un nouvel élément est
rapide.
– les éléments d'un objet TreeSet sont triés : l'insertion d'un nouvel élément est plus long.

20
Classe HashSet<E>

• Cette classe est un ensemble d’élément sans ordre de tri


particulier.

• Les éléments sont stockés dans une table de hashage : cette


table possède une capacité.

21
Classe HashSet<E>
import java.util.*;
public class TestHashSet {
public static void main(String args[]) {
Set set = new HashSet();
set.add("CCCCC");
set.add("BBBBB");
set.add("DDDDD");
set.add("BBBBB");
set.add("AAAAA");
Iterator iterator = set.iterator();
while (iterator.hasNext()) {System.out.println(iterator.next());}
}
}

Resultat : {CCCCC, BBBBB, DDDDD, AAAAA }


22
Classe TreeSet <E>

• Cette classe est un arbre qui représente un ensemble trié d'éléments.

• L'insertion d'un nouvel élément dans un objet de la classe TreeSet est donc
plus lent mais le tri est directement effectué.

23
Classe TreeSet<E>
import java.util.*;
public class TestHashSet {
public static void main(String args[]) {
Set ts = new TreeSet();
ts.add("one");
ts.add("two");
ts.add("three");
ts.add("four");
ts.add("three");
System.out.println("TreeSet = " + ts);
}
}

Resultat : TreeSet = [four, one, three, two]


24
Interface qui hérite
de l’interface Set
Interface SortedSet

• Cette interface définit une collection de type ensemble trié par un


comparateur.
• Elle hérite de l'interface Set.
• Définit les méthodes suivantes :

✓ Comparator<E> comparator() : Renvoie le comparateur utilisé pour définir l'ordre


✓ E first(), last() : Renvoie le premier/dernier élément
✓ Très peu utiliser car SortedSet ne définie pas assez de méthodes et ne possédait
qu'une implémentation TreeSet

26
Interface List
Interface List
• Elle hérite aussi de collection, mais elle autorise la
duplication.
• Dans cette interface, un système d'indexation a été
introduit pour permettre l'accès (rapide) aux éléments de
la liste.

28
Exemple

29
Les méthodes de l'interface List

• Les méthodes de l'interface List permettent d'agir sur un élément


se trouvant à un index donné ou bien un ensemble d'éléments à
partir d'un index donné dans la liste.
• get (remove) retourne (ou retirer) l'élément se trouvant à la
position index.
• set (add & addAll) modifie (ou ajouter) l'élément (un seul ou une
collection) se trouvant à la position index.
• indexOf (lastIndexOf) recherche si un objet se trouve dans la liste
et retourner son (ou son dernier) index.
• subList permet de créer un sous-liste d'une liste.
30
31
Parcours de la Liste
• Pour parcourir une liste, il a été défini un itérateur spécialement
pour la liste.

32
Parcours de la Liste

• Cet Itérateur permet de parcourir la liste dans les deux directions


et de modifier un élément (set) ou d'ajouter un nouveau élément :

• hasNext permet de vérifier s'il y a un élément qui suit.


• next permet de pointer l'élément suivant.
• nextIndex retourne l'index de l'élément suivant.

33
Exemple
import java.util.*;
public class Example {
public static void main(String args[]) {
// Create a new ArrayList
ArrayList L= new ArrayList();
// Add some items to the ArrayList
L.add(1);
L.add(2);
L.add(3);
L.add(4);
L.add(5);
Iterator i = L.iterator();
// Loop through ArrayList contents
while(i.hasNext()) {
Object item = i.next();
System.out.print(item + ", ");
34
} }}
Autres opérations sur la
collection

• Tri
• Recherche dans une
collection
Collection

• Cette classe ne contient que des méthodes static,


utilitaires pour travailler avec des collections :

– Parcours d’une collection : Iterator


– Trie (sur listes)
– Recherche (sur listes)
– Copie
– Recherche du minimum et maximum

36
Interface ITERATOR<E>
• En Java, la classe Iterator fait partie de l'interface java.util.Iterator.
• Elle est utilisée pour parcourir les éléments d'une collection (par exemple,
une liste, un ensemble, etc.) de manière séquentielle sans présenter les
détails internes de la collection.
• L'interface Iterator contient les méthodes suivantes :

public interface Iterator {


boolean hasNext(); //Permet de vérifier s'il y a un élément qui suit
Object next(); //Permet de pointer sur l'élément suivant
void remove(); //Permet de retirer l'élément courant
}

37
Fonctionnalités principales de l'interface
Iterator
• L'interface Iterator définit trois méthodes principales :

• hasNext() : Vérifie s'il reste des éléments à parcourir dans la collection.


Retourne true si un autre élément est disponible, sinon false.

• next() : Retourne l'élément suivant de la collection. Si aucun élément n'est


disponible, elle lève une exception NoSuchElementException.

• remove() : Supprime le dernier élément retourné par next() de la collection.


Si l'opération n'est pas prise en charge, elle lève une exception
UnsupportedOperationException.
38
Exemple

Le résultat attendu est : Éléments de la liste :


10
20
30 39
Liste après suppression : [10, 30]
Schéma explicatif
• Voici l'état de l'itérateur à chaque étape pour la liste [10, 20, 30]:

•Avant le début de la boucle : Lorsque vous obtenez un itérateur avec iterator() :


–L'itérateur est positionné avant le premier élément de la liste. Il ne pointe sur aucun élément.
•Lors du premier appel à hasNext():
–La méthode vérifie si la liste contient au moins un élément après la position actuelle.
–Si c'est le cas (c'est-à-dire si la collection n'est pas vide), elle retourne true
.

•Lors du premier appel à next():


–L'itérateur passe au premier élément de la liste et le retourne.
40
Le Tri

• Afin de trier une liste :


Collections.sort(l);

• Pour que la liste soit correctement triée, il faut que les éléments
de la liste soient comparables.
• Plus exactement, la méthode sort() ne fonctionnera que si tous
les éléments de la liste sont d’une classe qui implante l’interface
prédéfinie :
Comparable<T>
41
Interface Comparable<T>
• Cette interface utilise un ordre naturel dans les instances d’une classe.
• L’interface est présente dans le package java.lang.
• L'interface Comparable est utile lorsqu’on veut définir un ordre par défaut
pour les objets.
• Par exemple, dans le cas des objets Person, on veut définir un ordre basé
sur le nom.
• Les éléments sont comparables par un ordre usuel, par exemple :
– Byte, Short, Integer, Long, Float, Double, BigInteger et BigDecimal: Ordre numérique
signé.
– Char (caractère): Ordre numérique non signé (donc alphabétique).
– File: Ordre lexicographique sur le chemin d'accès.
– String: Ordre lexicographique.
– Date: Ordre chronologique. 42
Interface Comparable<T>

• L'interface Comparable déclare une seule méthode pour trier les éléments
en Java, nommée :

int compareTo(Object o);

• On redéfinie la méthode :
public int compareTo (Object o) avec :

– a.compareTo (b) == 0 si a.equalsTo(b)


– a.compareTo (b) < 0 si a plus « petit » que b
– a.compareTo (b) > 0 si a plus « grand » que b
43
Exemple de Comparable

44
Interface Map
Interface Map

<<interface>> <<abstract>>
Map<K, V> AbstractMap<K, V>

<<interface>>
SortedMap <K, V> TreeMap<K, V> HashMap<K, V>

46
Interface Map
• L’interface Map<K,V> correspond à un groupe de couples clés-valeurs.

• La clé est unique, contrairement à la valeur qui peut être associée à


plusieurs clés (dans la map, il ne peut pas exister 2 clés égales).

• Les deux classes qui implémentent cette interface sont :


– HashMap<K,V>, table de hachage ; garantit un accès en temps constant.

– TreeMap<K,V>, arbre ordonné suivant les valeurs des clés avec accès en log(n) ;

• La comparaison utilise l’ordre naturel (interface Comparable<K>) ou une


instance de Comparator<K>.
47
Exemple de méthodes

48
Interface Map : Les méthodes

• Object put(K clé, V valeur) • ajouter et enlever des couples clé – valeur
• void putAll(Map<K,V>map)
• void remove(Object key)
• boolean containsKey(Object clé) • vérifier si une table contient une clé
• boolean containsValue(Object valeur) • vérifier si une table contient une valeur
• Set<Map.Entry<K,V>> entrySet()
• V get(Object clé) • récupérer une référence à un des
• boolean isEmpty() éléments donnant sa clé
• Set<K> keySet() • récupérer les clés
• int size() • récupérer la taille
• Collection<V> values() • récupérer les valeurs

49
Interface Map : Récupération des données

keySet()
Récupérer les clés sous forme de Set<K> avec la méthode iterator()

values() Récupère les valeurs sous forme de Collection<V> avec la méthode


iterator()

Récupère les entrées (clé-valeur) sous forme de Set<Entry<K,V>>


entrySet() avec la méthode iterator()

50
Interface Map : Map.Entry<K,V>

• L’interface Map contient l’interface interne public Map.Entry<K,V>


qui correspond à un couple clé-valeur.

• Cette interface contient 3 méthodes :


K getKey()
V getValue()
V setValue(V valeur)

• La méthode entrySet() de Map renvoie un objet de type


« ensemble (Set) de Entry »
51
Interface Map : Les méthodes d’itération

// iterer sur les clés


for (Iterator i = m.keySet().iterator(); i.hasNext(); )
System.out.println(i.next());

// iterer sur les valeurs


for (Iterator i = m.values().iterator(); i.hasNext(); )
System.out.println(i.next());

// iterer sur la paire clé/valeur


for (Iterator i = m.keySet().iterator(); i.hasNext(); ) {
Map.Entry e = (Map.Entry) i.next();
System.out.println (e.getKey() + " ; " + e.getValue());
}
52
HashMap et hashCode()

• La classe HashMap<K,V> utilise la structure informatique


nommée « table de hachage » pour ranger les clés.

• La méthode hashCode() est utilisée pour répartir les clés dans la


table de hachage.

– Deux objets identiques ont le même hashCode.


– Deux objets ayant le même hashCode ne sont pas forcément identiques.

53
Exemple de la classe HashMap

Contenu de la HashMap : {Alice=25, Bob=30, Charlie=35}


Alice a 25 ans.
Après suppression de Bob : {Alice=25, Charlie=35}
Parcours de la HashMap :
Alice : 25
Charlie : 35 54
Taille de la HashMap : 2
Explications

1.Création d'une HashMap :


•HashMap<String, Integer> signifie que les clés sont des String et les valeurs sont des Integer.
2.Méthodes principales utilisées :
•put(K key, V value) : Ajoute une paire clé-valeur dans la HashMap.
•get(Object key) : Récupère la valeur associée à une clé.
•containsKey(Object key) : Vérifie si une clé spécifique est présente.
•remove(Object key) : Supprime une paire clé-valeur.
•keySet() : Renvoie un ensemble des clés présentes dans la HashMap.
•size() : Retourne le nombre d'éléments dans la HashMap.
3.Parcours :
•Utilisation de keySet() pour parcourir les clés et accéder aux valeurs associées.

55
Exemple de TreeMap

Contenu de la TreeMap : {Alice=25, Bob=30, Charlie=35, Diana=28}


Bob a 30 ans.
Après suppression de Charlie : {Alice=25, Bob=30, Diana=28}
Parcours de la TreeMap :
Alice : 25
Bob : 30
Diana : 28
Première clé : Alice
Dernière clé : Diana 56
Explications

1.Création d'une TreeMap :


•La classe TreeMap trie automatiquement les clés.
•Les clés (String) seront triées par ordre alphabétique.
2.Méthodes principales utilisées :
•put(K key, V value) : Ajoute une paire clé-valeur.
•get(Object key) : Récupère la valeur associée à une clé.
•containsKey(Object key) : Vérifie si une clé existe.
•remove(Object key) : Supprime une paire clé-valeur.
•firstKey() et lastKey() : Renvoient respectivement la première et la dernière clé dans l'ordre.
3.Parcours :
•Utilisation de keySet() pour obtenir les clés triées.

57
To be continued !

58

Vous aimerez peut-être aussi