Quand est-il préférable d'utiliser un vecteur plutôt qu'un tableau et vice versa en java ? et pourquoi ?
Réponses
Trop de publicités?Vector
: jamais, sauf si une API l'exige, car il s'agit d'une classe et non d'une interface.
List
ce devrait être votre collection par défaut de type tableau. C'est une interface, donc n'importe quoi peut être un List
s'il le faut. (et il y a beaucoup de List
Il existe de nombreuses implémentations, par exemple ArrayList
, LinkedList
, CopyOnWriteArrayList
, ImmutableList
(pour divers ensembles de caractéristiques)
Vector
est à l'abri des fils, mais c'est aussi le cas de la Collections.synchronizedList()
l'emballage.
tableau : rarement, si cela est requis par une API. L'autre avantage majeur des tableaux est que lorsque vous avez besoin d'un tableau de primitives de longueur fixe, l'espace mémoire requis est assez compact, comparé à un tableau de type List<Integer>
où les nombres entiers doivent être mis en boîte dans Integer
objets.
A Vector
(o List
) quand on ne sait pas à l'avance combien d'éléments vont être insérés.
Un site array
quand on sait absolument quel est le nombre maximum d'éléments sur toute la durée de vie de ce vecteur.
Puisqu'il n'y a pas de pénalités de performance élevées lors de l'utilisation de List
o Vector
(n'importe quelle collection d'ailleurs), je choisirais toujours de les utiliser. Leur flexibilité est trop importante pour ne pas être prise en compte.
Aujourd'hui, je n'utilise que arrays
quand j'en ai absolument besoin. Exemple : lorsque j'utilise une API qui les requiert.
Lorsque vous déclarez une méthode, utilisez List
.
Ne pas utiliser Vector
il s'agit d'une partie ancienne du JDK et a été adapté pour fonctionner avec Collections
.
S'il s'agit d'un algorithme très sensible aux performances, un membre privé du tableau peut être utile. S'il est nécessaire de retourner son contenu ou de le passer à une méthode, il est généralement préférable de construire un objet autour de lui, peut-être aussi simple que Arrays.asList(thePrivateArray)
. Pour une liste sécurisée : Collections.synchronizedList(Arrays.asList(thePrivateArray))
. Afin d'empêcher la modification du contenu du tableau, j'utilise typiquement Collections.unmodifiableList(Arrays.asList(thePrivateArray))
.