Structures de données

Remonter d'un niveau

Utiliser un ArrayList

Un tableau dynamique en Java? Oui, ça existe. Même que ça s'appelle un ArrayList. C'est la "structure à tout faire" en Java et devrait être choisie de préférence à la classe Vector.

Création

À la création d'un ArrayList, il est de mise de spécifier le type des objets qu'il contiendra.

import java.util.ArrayList;

// un ArrayList de chaînes de caractères
ArrayList<String> liste = new ArrayList<String>();

// on suppose ici que la classe Foobar a déjà été déclarée
ArrayList<Foobar> liste = new ArrayList<Foobar>();

Pour des types primitifs, il faut utiliser les classes d'enrobage. Par exemple, pour un ArrayList de valeurs de type int, on utilise la classe d'enrobage Integer.

ArrayList<Integer> nombres = new ArrayList<Integer>();

Ajouts d'éléments

On utilise la méthode add, qui ajoute l'élément à la fin de la liste.

Foobar foo = new Foobar();
liste.add(foo);

Dans le cas des types primitifs, la conversion en une instance de la classe d'enrobage correspondante se fait automatiquement (c'est qu'on appelle l'autoboxing).

// ajoute un Integer
nombres.add(5);

Vérifier l'état de la liste

Pour savoir si la liste est vide.

if (liste.isEmpty())
    System.out.println("Liste vide");

Pour savoir elle contient combien d'éléments.

System.out.println("La liste contient " + liste.size() + " éléments");

Manipuler les éléments

Pour vérifier si un élément est contenu dans la liste.

if(liste.contains(foo))
    System.out.println("Objet trouvé!");

Pour trouver la position d'un élément. La méthode retourne -1 si non trouvé.

System.out.println(
    "L'objet est à la position " + liste.indexOf(foo));

Pour obtenir (sans le retirer) un élément situé à une position donnée.

// obtient le 6e élément
Foobar f = liste.get(5);

Pour retirer un élément de la liste. Si le même objet est plusieurs fois dans la liste, c'est la première occurence qui est supprimée.

if (!liste.remove(foo)) {
    System.err.println(
        "Tentative de retirer un objet non contenu dans la liste");
}

Parcourir la liste

Ici, après avoir obtenu un itérateur de liste, on parcourt celle-ci et affiche son contenu.

ListIterator<String> li = liste.listIterator<String>();
 
    while (li.hasNext())
        System.out.println(li.next());