ArrayList vs Vector
Un vecteur implémente des tableaux qui peuvent croître / réduire au moment de l'exécution lorsque certains éléments sont ajoutés ou supprimés. On accède à ses éléments en utilisant un index entier. Deux champs - capacité et incrément de capacité, caractérisent la gestion du stockage vectoriel. Il implémente quatre interfaces:
* Liste
* Accès aléatoire
* Clonable
* Interfaces sérialisables
ArrayList, tout comme les vecteurs, implémente également quatre interfaces. Encore une fois, comme les vecteurs, sa taille peut changer pendant l'exécution. En outre, il a un champ appelé capacité dont la taille est aussi grande que la taille de la ArrayList.
Les deux vecteurs et ArrayList sont utiles pour récupérer des éléments à partir de n’importe quelle position et pour insérer ou supprimer des éléments à la fin de la classe de conteneur..
Du point de vue de l'API, les deux vecteurs et ArrayList sont très similaires. Alors, où se situe exactement la différence entre les deux? Les points suivants éclaireront cette question:
1. Synchronisation: Les vecteurs sont synchronisés mais ArrayList ne l’est pas. Si vous ajoutez ou supprimez des éléments d'une ArrayList, cette modification est appelée modification structurelle. Lorsque plusieurs threads accèdent simultanément à un ArrayList avec un bloc de code modifiant la liste, il est nécessaire de synchroniser la liste en externe. En bref, le contenu des vecteurs est thread-safe alors que celui de ArrayList ne l’est pas. Si l'exigence ne mentionne pas la collection thread-safe, il convient d'opter pour ArrayList car la synchronisation réduit les performances. Les tableaux non synchronisés sont rapides.
2. Croissance des données: ArrayList et les éléments vectoriels sont stockés sous forme de tableaux, mais les vecteurs ont une taille par défaut de 10 et ArrayList n'a pas de taille par défaut. Quand on ajoute un élément à un ArrayList ou à un vecteur, il est possible que l'une ou l'autre classe manque de place. Dans un tel cas, un vecteur double par défaut sa taille alors que la taille de ArrayList augmente de 50%. Vous pouvez définir une valeur d’incrémentation dans le cas de vecteurs impossible pour ArrayList..
3. Parcourir les éléments: ArrayList a un avantage ici car vous pouvez accéder à ses éléments en utilisant simplement un index. Dans le cas de vecteurs, vous devez créer un itérateur pour parcourir ses éléments..
Résumé:
1.Si la classe conteneur doit être modifiée par un seul thread ou une variable locale, vous devez utiliser un ArrayList..
2. Lorsque plusieurs threads ont accès à la classe de conteneur, utilisez des vecteurs, sinon vous devrez effectuer une synchronisation manuelle..
3.Nous pouvons spécifier la taille d’incrément avec le vecteur et avec ArrayList nous ne pouvons pas.
4.Un vecteur est synchronisé et une ArrayList n'est pas.
5.Un vecteur peut incrémenter la taille deux fois; ArrayList peut l'incrémenter de 50%.