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.
À 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>();
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);
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");
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"); }
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());