Vectors

Vector en Java

Ce site ne sera plus alimenté de contenu après août 2014. Tous les nouveaux articles seront redigés pour www.waitingforcode.com

Vector est une nouvelle classe de collection en Java. Cependant à nos jours, il est conseillé d'utiliser ArrayList à sa place.

Malgré le caractère obsolet, Vector compose encore aujourd'hui des applications Java. C'est pourquoi il est utile de le connaître. Il est aussi utile de savoir pourquoi il vaut mieux privilégier ArrayList à Vector.

Comme l'explique parfaitement JavaDoc, Vector représente un tableau d'objets. A la différence d'un tableau normal, sa capacité peut varier en fonction d'opérations effectuées (suppression, ajout).

A sa initialisation, Vector peut prendre comme paramètre le nombre d'éléments qu'il va stocker. On peut également lui spécifier le nombre d'éléments supplémentaires qu'il pourra accepter s'il est saturé.

Constatons cette différence sur un court exemple :

import java.util.Vector;

public class VectorExemple {
    public static void main(String[] args) {
        String item1 = "String item";
        double item2 = 3.0d;
        int item3 = 3;
    
        Vector<Object> vector = new Vector<Object>(3);
        vector.add(item1);
        vector.add(item2);
        vector.add(item3);
        System.out.println("Found Vector (initial size 3) : " + vector);
        vector.add("supplementary item");
        System.out.println("Found Vector : " + vector);

        String[] stringArray = new String[3];
        stringArray[0] = "item1";
        stringArray[1] = "item2";
        stringArray[2] = "item3";
        System.out.println("String array " + stringArray);
        stringArray[3] = "item4";
    }
}

Après la compilation et l'exécution on recevra des messages suivants :

Found Vector (initial size 3) : [String item, 3.0, 3]
Found Vector : [String item, 3.0, 3, supplementary item]
String array [Ljava.lang.String;@c3c749
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
        at VectorExemple.main(VectorExemple.java:23)

On constate que, malgré la capacité initiale spécifiée, Vector peut grossir. Ce n'est pas le cas pour le tableau pour qui on reçoit une exception suite à la tentative d'ajout d'un nouvel élément.

Pourquoi privilégier ArrayList au Vector ?

Vector (aussi bien que Hashtable) est considéré comme une implémentation legacy dans le framework Collection. Elle a été moderniée pour pouvoir faire partie de package à côté de nouvelles implémentations (maps, lists). Malgré cette modérnisation, l'usage du Vector devrait être limité et remplacé par une implémentation correspondante plus récénte.

Tout d'abord, cette pratique s'explique par le mécanisme de synchronisation interne au Vector. Ses méthodes, set() et get(), sont déjà synchronisées. Cependant eecette synchronisation interne influence les performances de l'applications. C'est vrai surtout quand la synchronisation n'est pas nécessaire. Alors l'utilisation d'ArrayList s'impose naturellement.

En plus, ArrayList fait partie d'un élément natif du framework Collection tandis que Vector a dû être adapté. C'est une raison de plus pour laquelle l'utilisation de cette première classe est conseillée.

Bartosz KONIECZNY Classes

Une question ? Une remarque ?

*

*

Un conseil Android

Comment accéder au localhost ?

A la place de 127.0.0.1 il faut utiliser 10.0.2.2.