Aller au menu - Aller au contenu

Icône Les collections d'objets

Mise à jour : 12/02/2010
Difficulté : Intermédiaire Intermédiaire Creative Commons BY-NC-SA
96 702 visites depuis 7 jours, dont 1 870 sur ce chapitre classé 4/786
Voici une partie qui va sans doute plaire...
Ici nous allons voir qu'il est possible de stocker des données autrement qu'avec des tableaux !
Et je dirais même plus, ces fameux objets collections sont dynamiques... en gros, ils n'ont pas de taille à pré-définir. On ne peut donc pas dépasser leur capacité ! :D

Je ne passerai pas en revue tous les types et tous les objets collection... J'ajouterai aussi qu'il s'agit d'une présentation succinte des collections d'objets. Je préfère vous prévenir à l'avance ! ;)


Je sens que vous êtes impatients. Allons-y, alors !
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

L'objet LinkedList

Une liste chaînée est une liste dont chaque élément est relié au suivant par une référence à ce dernier, sa taille n'est pas fixe : on peut ajouter et enlever des éléments selon nos besoins.
Les LinkedList acceptent tout type d'objet.
Chaque élément contient une référence sur l'élément suivant sauf pour le dernier : son suivant est en fait null.
Cette classe se trouve dans le package java.util.

Voici un petit code pour appuyer mes dires :
Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
 
public class Test {
 
        public static void main(String[] args) {
         
                List l = new LinkedList();
                l.add(12);
                l.add("toto ! !");
                l.add(12.20f);
                
                
                for(int i = 0; i < l.size(); i++)
                        System.out.println("Élément à l'index " + i + " = " + l.get(i));
                
        }
}


Vous pourrez constater que tous les éléments s'affichent !
Maintenant, vous devez savoir autre chose sur ce genre d'objet. Ceux-ci implémentent l'interface Iterator. Ceci signifie que nous pouvons utiliser cette interface pour lister notre LinkedList.
Dans le code suivant, j'ai rajouté le parcours avec un itérateur :

Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
 
public class Test {
 
        public static void main(String[] args) {
         
                List l = new LinkedList();
                l.add(12);
                l.add("toto ! !");
                l.add(12.20f);
                
                
                for(int i = 0; i < l.size(); i++)
                        System.out.println("Élément à l'index " + i + " = " + l.get(i));
                
                
                System.out.println("\n \tParcours avec un itérateur ");
                System.out.println("-----------------------------------");
                ListIterator li = l.listIterator();
                
                while(li.hasNext())
                        System.out.println(li.next());
        }
}


Vous pouvez constater que les deux manières de procéder sont analogues !
Cependant, je dois vous dire quelques choses sur les listes chaînées. Vu que les éléments ont une référence à leur élément suivant, ce type de listes peut être particulièrement lourd lorsqu'elles deviennent volumineuses ! :euh:
À utiliser avec précaution. Si vous voulez en savoir plus, c'est par là.
Nous allons voir un autre objet de la même famille : les ArrayList.

L'objet ArrayList

Voici un objet bien pratique.
Un ArrayList est donc un de ces objets qui n'ont pas de taille limite, et en plus, ils acceptent n'importe quel type de données ! null y compris ! :waw:

Dans un ArrayList, nous pouvons mettre tout ce que nous voulons. Vous devez par contre importer la classe ArrayList. Elle se trouve dans le package java.util. Mais vous connaissez une bonne technique pour importer vos classes !

Pour preuve, voici un morceau de code qui le met en œuvre :

Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import java.util.ArrayList;
 
public class Test {
 
        public static void main(String[] args) {
         
                ArrayList al = new ArrayList();
                al.add(12);
                al.add("Une chaîne de caractères !");
                al.add(12.20f);
                al.add('d');
                
                for(int i = 0; i < al.size(); i++)
                {
                        System.out.println("donnée à l'indice " + i + " = " + al.get(i));
                }               
        }
}


Si vous exécutez ce code, vous aurez :

Image utilisateur


Je pense que vous voyez déjà les avantages des ArrayList.
Vous devez savoir aussi qu'il existe tout un panel de méthodes dans cet objet :
  • add() : permet d'ajouter un élément.
  • get(int index) : retourne l'élément à l'index demandé.
  • remove(int index) : efface l'entrée à l'indice demandé.
  • isEmpty() : renvoie "vrai" si l'objet est vide.
  • removeAll(): efface tout le contenu de l'objet.
  • contains(Object element): retourne "vrai" si l'élément passé en paramètre est dans l'objet.
  • ...


Si vous voulez en savoir plus, c'est par là.

Un autre objet pratique, les Hashtable.

L'objet Hashtable

Table de hachage, si vous traduisez mot à mot...
Ce type d'objet rentre dans la catégorie des Map. Entendez par là qu'ils rangent leurs éléments avec un système "clé-valeur". La clé est unique, mais la valeur, elle, peut être associée à plusieurs clés !

On parcourt ces objets grâce aux clés qu'ils contiennent. Vu que notre mémoire peut être défaillante, il existe un moyen de parcours très simple. En utilisant la classe Enumeration. L'objet obtient tout le contenu de notre Hashtable et permet de le parcourir très simplement. Regardez, le code suivant insère les saisons avec des clés qui ne se suivent pas, et notre énumération récupère seulement les valeurs :

Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Enumeration;
import java.util.Hashtable;
 
public class Test {
 
        public static void main(String[] args) {
         
                Hashtable ht = new Hashtable();
                ht.put(1, "printemps");
                ht.put(10, "été");
                ht.put(12, "automne");
                ht.put(45, "hiver");
                
                Enumeration e = ht.elements();
                
                while(e.hasMoreElements())
                        System.out.println(e.nextElement());
                
        }
}


Vous constaterez que le code marche très bien et qu'il est très simple d'utilisation.
Cet objet nous offre lui aussi tout un panel de méthodes utiles :
  • isEmpty() : retourne "vrai" si l'objet est vide.
  • contains(Object value) : retourne "vrai" si la valeur est présente. Identique à containsValue(Object value).
  • containsKey(Object key) : retourne "vrai" si la clé passée en paramètre est présente.
  • put(Object key, Object value) : ajoute le couple key/value dans l'objet.
  • elements() : retoune une énumération des éléments de l'objet.
  • keys() : retourne la liste des clés sous forme d'énumération.
  • ...


Vous devez savoir qu'il existe un autre objet de type Map : il s'agit du HashMap ; son utilisation ne diffère que très peu du Hashtable. Je n'en parlerai donc pas... :o

Si vous voulez en savoir plus sur les Hashtable, c'est par là.

L'objet HashSet

Un Set est une collection qui n'accepte pas les doublons. Elle n'accepte qu'une seule fois la valeur null, car deux fois cette valeur est considérée comme un doublon.
On peut dire que cet objet n'a que des éléments différents en son sein !
Certains Set sont plus restrictifs que d'autres, n'acceptent pas null ou un certain type d'objet.
On peut parcourir ce type de collection avec un objet Iterator ou, cet objet peut retourner un tableau d'Object.
Voici un code simple :

Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.HashSet;
import java.util.Iterator;
 
public class Test {
 
        public static void main(String[] args) {
         
                HashSet hs = new HashSet();
                hs.add("toto");
                hs.add(12);
                hs.add('d');
                
                Iterator it = hs.iterator();
                while(it.hasNext())
                        System.out.println(it.next());
 
                System.out.println("\nParcours avec un tableau d'objet");
                System.out.println("-----------------------------------");
                
                Object[] obj = hs.toArray();
                for(Object o : obj)
                        System.out.println(o);
                
        }
}


Voici une liste des méthodes que l'on peut trouver dans cet objet :
  • add() : ajoute un élément.
  • contains(Object value) : retourne "vrai" si l'objet contient value.
  • isEmpty() : retourne "vrai" si l'objet est vide.
  • iterator(): renvoie un objet de type Iterator.
  • remove(Object o) : retire l'objet o de la collection.
  • toArray() : retourne un tableau d'Object.
  • ...


Pour en savoir plus sur les HashSet, c'est par là.

Voilà : nous avons vu quelque chose d'assez intéressant. Je ne pense pas qu'un QCM soit de mise pour cette partie... :D Profitez-en !
Allez ! Zou... ^^
Voici encore un chapitre important !
Surtout prenez bien le temps de faire des tests, de voir comment se comporte chaque objet...

Le principal problème qui va se poser maintenant, c'est :
Quelle collection utiliser ?

Pour ceci, je ne peux pas vous aider... cela dépendra du type de besoin que vous aurez...
Personnellement, je me sers le plus souvent d'ArrayList et de Hashtable.

Dès que vous vous sentez prêts, en avant pour la généricité en Java.
Chapitre précédent Sommaire Chapitre suivant

Partager

38 commentaires pour "Les collections d'objets"
Note moyenne : 3.57 / 4 (1025 votes)
Pseudo Commentaire
Hors ligne lilmac # Posté le 09/02/2012 à 14:59:40
Never trust user input.
Avatar

Ville : Dakar
Pays : Sénégal

A vrai dire j'ai pas très bien compris cette partie!! Et en plus c'est totalement différent de ce que je vois dans les autres tutoriels qui parlent des collections.
Donc plus d'explication ne ferait pas de mal!

:p :p let's get it started!! :p :p
 
Hors ligne lilmac # Posté le 09/02/2012 à 14:59:47
Never trust user input.
Avatar

Ville : Dakar
Pays : Sénégal

A vrai dire j'ai pas très bien compris cette partie!! Et en plus c'est totalement différent de ce que je vois dans les autres tutoriels qui parlent des collections.
Donc plus d'explication ne ferait pas de mal!

:p :p let's get it started!! :p :p
 
Hors ligne lilmac # Posté le 09/02/2012 à 15:00:44
Never trust user input.
Avatar

Ville : Dakar
Pays : Sénégal

A vrai dire j'ai pas très bien compris cette partie!! Et en plus c'est totalement différent de ce que je vois dans les autres tutoriels qui parlent des collections.
Donc plus d'explication ne ferait pas de mal!

:p :p let's get it started!! :p :p
 
Hors ligne Elzakaria # Posté le 28/04/2012 à 22:50:08
Avatar

Avis : Très bon

Les liens de la doc sont périmés, je crois que c'est du à l'achat de Java par Oracle ?
Hors ligne Link55 # Posté le 29/04/2012 à 15:29:13
Avatar

Études : IUT Nancy-Charlemagne

Il manque pas mal de notions sur les collections qui ne sont pas développées dans ce tutoriel.
Il manque aussi 2-3 points qui ne sont pas abordé et qui permettent de faire le lien entre les collections et d'autres notions sous Java.

Voir tous les commentaires