web-dev-qa-db-fra.com

Quelle est la collection Java Java la plus rapide avec les fonctionnalités de base d'une file d'attente?

Quelle est la collection la plus rapide en Java?

Je n'ai besoin que des opérations pour ajouter et supprimer, l'ordre n'est pas important, les éléments égaux ne sont pas un problème, rien de plus que l'ajout et la suppression sont importants.

Sans limite, la taille est également importante.

Cette collection aura des objets en lui.

Actuellement, j'utilise ArrayDeque parce que je vois que c'est l'implémentation de file d'attente plus rapide.

67
Renato Dinhani

ArrayDeque est le meilleur. Voir ce benchmark , qui vient de ce billet de blog sur les résultats du benchmarking. ArrayDeque n'a pas la surcharge des allocations de nœuds que LinkedList n'a pas la surcharge de déplacer le contenu du tableau laissé sur supprimer que ArrayList a. Dans le cas-test, il effectue environ 3x ainsi que LinkedList pour les grandes files d'attente et même légèrement mieux que ArrayList pour files d'attente vides. Pour de meilleures performances, vous souhaiterez probablement lui donner une capacité initiale suffisamment grande pour contenir le nombre d'éléments qu'il est susceptible de contenir à la fois pour éviter de nombreux redimensionnements.

Entre ArrayList et LinkedList, il semble que cela dépend du nombre moyen d'éléments totaux que la file d'attente contiendra à un moment donné et que LinkedList bat ArrayList à partir d'environ 10 éléments.

84
ColinD

Vous pouvez utiliser un Java.util.LinkedList - c'est doublement lié et cicrulaire, donc ajouter à une extrémité et prendre de l'autre sont O (1)

Quelle que soit l'implémentation que vous choisissez, faites-y référence par l'interface Queue, afin de pouvoir la modifier facilement si elle ne correspond pas à votre cas (si, bien sûr, une file d'attente est ce dont vous avez besoin en premier lieu )

Mise à jour: la réponse de Colin montre une référence qui conclut que ArrayDeque est meilleur. Les deux ont des opérations O(1), mais LinkedList crée de nouveaux objets (nœuds), qui ont légèrement des performances. Comme les deux ont O(1) = Je ne pense pas qu'il serait trop mal de choisir LinkedList.

6
Bozho