Les Collections en JAVA
Les Collections en JAVA
1.Introduction
2.List
• ArrayList
• LinkedList
• Généricité et construction d’une liste
3.Set
• HashSet
• LinkedHashSet
• TreeSet
4.Map
• Hashtable
• HashMap
• Construction d’entrée et de map
5. Remarques
1
A.Khalfi
1.Introduction
2
A.Khalfi
2.Les List
List
2.1.ArrayList
• Pas de limite de taille
• Possibilité de stocker tout type de données (y compris null)
Pour créer un ArrayList
ArrayList list = new ArrayList();
Le résultat est
valeur d’indice 0 : 3
valeur d’indice 1 : Bonjour
valeur d’indice 2 : 3.5
valeur d’indice 3 : c
3
A.Khalfi
• removeAll() : supprime tous les éléments de la liste
• set(index, object) : remplace la valeur de l’élément d’indice index de la liste par object
• isEmpty() : retourne true si la liste est vide, false sinon.
• contains(object) : retourne true si object appartient à la liste, false sinon.
• ...
Qu’affiche le programme suivant ?
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList liste = new ArrayList();
liste.add(0);
liste.add("bonjour");
liste.add(2);
liste.remove(1);
liste.set(1, "bonsoir");
for(Object elt : liste) {
System.out.print(elt + " ");}}}
Résultat :
0 bonsoir
Exercice 1 :
Ecrire un programme Java :
• Qui1 demande à l’utilisateur de remplir une liste avec des nombres positifs de son
choix, il s’arrête à la saisie de zéro
• Demande à l’utilisateur de saisir une valeur à supprimer de la liste
• Supprime la première occurrence de cette valeur de la liste
• Affiche la nouvelle liste (après suppression de la valeur demandée)
Exercice 2
• Demande à l’utilisateur de remplir une liste avec des nombres positifs de son choix, il
s’arrête à la saisie de zéro
• Demande à l’utilisateur de saisir une valeur 3
• Affiche les positions (de toutes les occurrences) de cette valeur dans cette liste
Exemple pratique :
4
A.Khalfi
Solution interface Iterator
• Implémentée par la plupart des collections ayant les méthodes suivantes
• Permettant de parcourir une collection
• Ayant les méthodes suivantes
✓ hasNext() : retourne true si l’iterateur contient d’autres elements
✓ next() : retourne l’element suivant de l’iterateur
✓ remove() : supprime le dernier objet obtenu par next()
✓ ...
5
A.Khalfi
Remarque :
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
LinkedList liste = new LinkedList();
liste.add(5);
liste.add("Bonjour ");
liste.add(7.5f);
ListIterator li = liste.listIterator();
while(li.hasNext())
System.out.println(li.next());}}
Résultat
premier 0 bonjour
6
A.Khalfi
On peut le faire aussi sans création de tableau : List<Integer> liste = Arrays.asList(2, 7, 1, 3);
Ou : List<Integer> liste = List.of(2, 7, 1, 3);
Ecrire un programme Java qui permet de supprimer l’avant dernière occurrence du chiffre 2
de la liste précédente.
Solution
liste.remove(liste.subList(0,liste.lastIndexOf(2)).lastIndexOf(2));
7
A.Khalfi
3.les Set
2.Les
Set
Set
2.1.HashSet
package org.eclipse.classes;
import java.util.HashSet;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
HashSet hs = new HashSet();
hs.add("bonjour");
hs.add(69);
hs.add(’c’);
Iterator it = hs.iterator();
while(it.hasNext())
System.out.println(it.next());}}
Le resultat :
c
69
Bonjour
8
A.Khalfi
HashSet : exemple avec conversion en tableau
public class Main {
public static void main(String[] args) {
HashSet hs = new HashSet();
hs.add("bonjour");
hs.add(69);
hs.add(’c’);
Object[] obj = hs.toArray();
for(Object o : obj)
System.out.println(o);}
Le résultat
c
69
Bonjour
3.2.TreeSet
9
A.Khalfi
4.Les map
Map
4.1.HashTable
Le résultat
C++
Pascal
PHP
Java
10
A.Khalfi
Le résultat
C++
Cobol
PHP
Java
4.2.HashMap
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
HashMap<Integer, String> hm = new HashMap();
hm.put(1, "Java");
hm.put(2, "PHP");
hm.put(10, "C++");
hm.put(17, null);
for (Entry<Integer, String> entry : hm.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());}}}
11
A.Khalfi
HashMap<String, Integer> repetition = new HashMap();
repetition.put("Java",2);
repetition.put("PHP",5);
repetition.put("C++",1);
repetition.put("HTML",4);
Exercice 4 :
Écrire un programme Java qui permet de répéter l’affichage de chaque clé de ce dictionnaire
selon la valeur associée.
12
A.Khalfi
Pour afficher
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> lettres = new ArrayList<String>();
lettres.add("d");
lettres.add("b");
lettres.add("a");
lettres.add("c");
Collections.sort(lettres); // pour trier la liste
System.out.println(lettres);
Collections.shuffle(lettres); // pour desordonner la liste
System.out.println(lettres);
List<String> sub = lettres.subList(1, 2); // extraire une sousliste
System.out.println(sub);
Collections.reverse(sub); // pour trier la liste dans le sens
decroissant
System.out.println(sub);}}
13
A.Khalfi
5.Remarques générales
• ArrayList VS LinkedList
• ArrayList est plus rapide pour l’opération de recherche (get)
• LinkedList est plus rapide pour des opérations d’insertion et de suppression
• LinkedList utilise un chainage double (deux pointeurs) d’où une consommation de
mémoire plus enlevée.
• Map à utiliser lorsqu’on veut rechercher ou accéder a une valeur via une clé de
recherche
• Set à utiliser si on n’accepte pas de doublons dans la collection
• List accepte les doublons permet l’accès a un élément via son indice et les éléments
sont insérés dans l’ordre (pas forcement tries)
14
A.Khalfi