Différences de performances entre ArrayList, LinkedList et Vector
26/05/2009
Faut-il plutôt utiliser ArrayList, LinkedList ou Vector ? Voici une question que tout développeur Java a dû se poser à un moment donné. Nous allons voir que cela dépend des opérations que l’on souhaite effectuer sur ces collections.
- ArrayList et Vector
Les classes ArrayList et Vector implémentent toutes les deux l’interface RandomAccess, ce qui signifie que l’accès à un élément aléatoire de la liste par la méthode get() est très rapide. Par contre, les performances concernant l’ajout et la suppression d’un élément vont dépendre de la position cet élément dans la liste. Plus l’élément est loin dans la liste, plus l’ajout/suppression sera rapide.
D’accord, mais quelle est la différence entre ArrayList et Vector ? C’est comme pour StringBuilder/StringBuffer ou Hashtable/HashMap. Vector est synchronisée et donc thread-safe alors qu’ArrayList ne l’est pas. Par conséquent, Vector est plus lent qu’ArrayList et ne doit être utilisé qu’en environnement multithreadé. - LinkedList
Contrairement à ArrayList, LinkedList n’implémente pas RandomAccess, elle est donc plus lente lors de l’accès à un élément aléatoire de la liste. Par contre, LinkedList est plus efficace qu’ArrayList concernant la suppression d’un élément car le temps nécessaire pour effectuer la suppression reste toujours constant quelle que soit la position de l’élément dans la liste.