Quelle est la différence entre les méthodes d'ajout et d'offre de PriorityQueue de Java?

12

Dans java.util.PriorityQueue, nous avons les méthodes add(E e)et offer(E e). Les deux méthodes sont documentées comme:

Insère l'élément spécifié dans cette file d'attente prioritaire.

Quelles sont les différences entre ces deux méthodes?

agent13
la source

Réponses:

17

La différence est que offer()retournera falses'il ne parvient pas à insérer l'élément dans une file d'attente de taille restreinte , tandis que add()lancera un IllegalStateException.

Vous devez l'utiliser offer()lorsque l'échec de l'insertion d'un élément est normal et add()lorsque l'échec est une occurrence exceptionnelle (qui doit être gérée).

yannis
la source
4

Pour découvrir la différence, il faut suivre les javadocs de l'API PriorityQueue qui à leur tour ont des sections "Spécifiées par" qui renvoient le lecteur aux méthodes respectives de l' Queueinterface:

  • Queue.add

    Insère l'élément spécifié dans cette file d'attente s'il est possible de le faire immédiatement sans violer les restrictions de capacité, en retournant true en cas de succès et en lançant une exception IllegalStateException si aucun espace n'est actuellement disponible ...
    Renvoie: true(comme spécifié par Collection.add (E) )
    Lance: IllegalStateException- si l'élément ne peut pas être ajouté à ce moment en raison de restrictions de capacité ...

  • Queue.offer

    Insère l'élément spécifié dans cette file d'attente s'il est possible de le faire immédiatement sans violer les restrictions de capacité. Lorsque vous utilisez une file d'attente à capacité limitée, cette méthode est généralement préférable d'ajouter (E), qui peut échouer à insérer un élément uniquement en lançant une exception ...
    Retourne: truesi l'élément a été ajouté à cette file d'attente, sinon false...

Les deux méthodes sont présentes car elles doivent être implémentées par l'interface déclarée.

Notez que comme PriorityQueue est illimité (comme indiqué dans javadocs: " file d'attente de priorité illimitée basée sur un segment de priorité ..."), la préférence des concepteurs d'API exprimée ci-dessus ne s'applique pas. Cela signifie qu'il est laissé à la discrétion du programmeur de choisir la méthode qui convient le mieux à ses besoins dans un contexte d'utilisation spécifique.

moucheron
la source
2
Pffft tu es allé voir les docs. Faible. ; P
yannis
1
@YannisRizos la prochaine chose que vous verrez serait que je me plaigne comme le Col Shrapnel :) oh vous ne pouvez pas rivaliser avec des réponses de 30 secondes: une question obtiendra 5 réponses avant même de trouver un lien approprié bla bla
gnat