La capacité de stockage des deux listes est extensible ou contractile, les concepteurs de java l'ont rendu dynamique pour maintenir un usage de stockage optimal. Cependant, chacune a sa méthode. ArrayList augmente par la moitié de sa taille tandis que Vector double sa taille par défaut. On peut augmenter la capacité de ArrayList en appelant la méthode
ensureCapacity().
4) fail-fastD'abord, laissons-nous comprendre ce qu'un fail-fast: si la collection (ArrayList, Vector, etc.) est modifiée à l’exception des opérations d'ajout et de suppression de iterator, après la création de iterator alors iterator va déclencher une exception
ConcurrentModificationException. La modification de la structure est reliée à l'ajout ou la suppression des éléments de la collection.
Vector retourne un objet Enumeration en appelant la méthode
elements() qui n'est pas fail. D'autre part, Iterator et ListIterator retournés par ArrayList sont fail-fast.
5) Qui appartient réellement au framework collection?Vector est l'une de ces classes arrivée avec JDK 1.0 et initialement ne faisait pas partie du framework Collection mais, dans la dernière version elle a été prise en compte parce qu'elle implémente l'interface List donc, elle est devenue une partie du framework collection.
ArrayList a été introduit après Vector avec la sortie du JDK 1.2. ArrayList a été plus avancée que Vector mais elle avait aussi tous les spécifications de Vector. Donc, les gens ont commencé à utiliser ArrayList au lieu Vector, et dans ce cas, Vector est devenue une classe héritée (legacy class).
Quand utiliser Vector et ArrayList ?
Cela dépend de vos besoins, si votre code fait la synchronisation des processus (threads), Vector serait le meilleur choix puisqu'il assure qu'un seul thread accède à la collection à la fois.
Les opérations de synchronisation consomment beaucoup de temps par rapport aux opérations non-synchronisées donc, si votre application doit s'exécuter plus vite et n'a pas besoin de synchronisation, ArrayList serait le bon choix, coté performance.
Ce tableau résume les 5 différences que l'on a vu:
ArrayList | Vector |
1) ArrayList n'est pas synchronisé. | Vector est synchronisé |
2) ArrayList incrémente 50% de sa taille actuelle si le nombre des éléments dépassent sa capacité | Vector invrémente 100%, cela veut dire le double de sa taille initiale si le nombre des éléments dépassent sa capacité |
3) ArrayList a été introduit dans JDK 1.2. | Vector a été introduit dans JDK 1.0 |
4) ArrayList es rapide parce qu'elle n'est pas synchronisé | Vector est lent parce qu'il est synchronisé. Dans un environnement concurent, il va bloquer les autres processus à accèder jusqu'à que le premier thread autorise l'accès |
5) ArrayList utilise Iterator pour parcourir les éléments | Vector utilise l'interface Enumeration pour parcourir les élément mais, elle peut utiliser Iterator aussi |