Prenons l' PriorityQueue
exemple http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html#offer(E)
Quelqu'un peut-il me donner un exemple Queue
où le add
etoffer
méthodes sont différentes?
Selon le Collection
document, la add
méthode cherchera souvent à s'assurer qu'un élément existe dans le Collection
plutôt qu'à ajouter des doublons. Ma question est donc la suivante: quelle est la différence entre les méthodes add
et offer
?
Est-ce que la offer
méthode ajoutera des doublons malgré tout? (Je doute que ce soit parce que si un Collection
ne devait avoir que des éléments distincts, cela éviterait cela).
EDIT: Dans un PriorityQueue
les méthodes add
et offer
sont la même méthode (voir ma réponse ci-dessous). Quelqu'un peut-il me donner un exemple de classe où les méthodes add
et offer
sont différentes?
offer
vsadd
.Il n'y a aucune différence pour la mise en œuvre de
PriorityQueue.add
:Car
AbstractQueue
il y a en fait une différence:la source
add
méthode est différente de laoffer
méthode?La différence entre
offer
etadd
est expliquée par ces deux extraits des javadocs:Depuis l'
Collection
interface:Depuis l'
Queue
interfacePriorityQueue
est uneQueue
implémentation qui n'impose aucune restriction d'insertion. Par conséquent, les méthodesadd
etoffer
ont la même sémantique.En revanche,
ArrayBlockingQueue
est une implémentation dans laquelleoffer
etadd
se comporte différemment, selon la façon dont la file d'attente a été instanciée.la source
La différence est la suivante:
offer method - essaie d'ajouter un élément à une file d'attente, et retourne false si l'élément ne peut pas être ajouté (comme dans le cas où une file d'attente est pleine), ou true si l'élément a été ajouté, et ne lève aucune exception spécifique .
add method - essaie d'ajouter un élément à une file d'attente, retourne true si l'élément a été ajouté ou lève une IllegalStateException si aucun espace n'est actuellement disponible.
la source
à partir du code source dans jdk 7 comme suit:
nous pouvons facilement savoir que la fonction add renverra true lors de l'ajout réussi d'un nouvel élément dans la file d'attente, mais lèvera une exception en cas d'échec.
la source
L'
Queue
interface spécifie quiadd()
lancera unIllegalStateException
si aucun espace n'est actuellement disponible (et sinon retourneratrue
) tandis queoffer()
retournerafalse
si l'élément n'a pas pu être inséré en raison de restrictions de capacité.La raison pour laquelle ils sont identiques dans a
PriorityQueue
est que cette file d'attente est spécifiée comme étant illimitée, c'est-à-dire qu'il n'y a pas de restrictions de capacité. En l'absence de restrictions de capacité, les contrats deadd()
etoffer()
affichent le même comportement.la source
J'écrirai l'exemple de code de contrat java pour la méthode d'offre et j'ajouterai une méthode montrant en quoi ils diffèrent.
la source
Source: http://docs.oracle.com/javase/6/docs/api/java/util/Queue.html
La méthode offer insère un élément si possible, sinon renvoie false. Cela diffère de la méthode Collection.add, qui peut échouer à ajouter un élément uniquement en lançant une exception non vérifiée. La méthode d'offre est conçue pour être utilisée lorsque l'échec est une occurrence normale plutôt qu'exceptionnelle, par exemple dans des files d'attente à capacité fixe (ou «limitées»).
la source