Tome, PriorityQueue
por ejemplo, http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html#offer(E)
¿Alguien puede darme un ejemplo de Queue
dónde los métodos add
y offer
son diferentes?
Según el Collection
documento, el add
método a menudo buscará garantizar que un elemento exista dentro del en Collection
lugar de agregar duplicados. Entonces mi pregunta es, ¿cuál es la diferencia entre los métodos add
y offer
?
¿Es que el offer
método agregará duplicados independientemente? (Dudo que sea porque si a Collection
solo tuviera elementos distintos, esto eludiría eso).
EDITAR: En PriorityQueue
los métodos add
y offer
son el mismo método (vea mi respuesta a continuación). ¿Alguien puede darme un ejemplo de una clase donde los métodos add
y offer
son diferentes?
offer
vsadd
.No hay diferencia para la implementación de
PriorityQueue.add
:Porque en
AbstractQueue
realidad hay una diferencia:fuente
add
método sea diferente aloffer
método?La diferencia entre
offer
yadd
se explica por estos dos extractos de los javadocs:Desde la
Collection
interfaz:Desde la
Queue
interfazPriorityQueue
es unaQueue
implementación que no impone restricciones de inserción. Por lo tanto, los métodosadd
yoffer
tienen la misma semántica.Por el contrario,
ArrayBlockingQueue
es una implementación en la queoffer
y seadd
comportan de manera diferente, dependiendo de cómo se instancia la cola.fuente
La diferencia es la siguiente:
método de oferta : intenta agregar un elemento a una cola y devuelve falso si el elemento no se puede agregar (como en el caso de que una cola esté llena), o verdadero si el elemento se agregó y no arroja ninguna excepción específica .
agregar método: intenta agregar un elemento a una cola, devuelve verdadero si el elemento se agregó o arroja una IllegalStateException si no hay espacio disponible actualmente.
fuente
desde el código fuente en jdk 7 de la siguiente manera:
podemos saber fácilmente que la función agregar devolverá verdadero cuando agregue con éxito un nuevo elemento a la cola, pero lanzará una excepción cuando fallará.
fuente
La
Queue
interfaz especifica queadd()
arrojará unIllegalStateException
si no hay espacio disponible actualmente (y de lo contrario regresarátrue
) mientrasoffer()
que regresaráfalse
si el elemento no se pudo insertar debido a restricciones de capacidad.La razón por la que son iguales en a
PriorityQueue
es que esta cola se especifica como ilimitada, es decir, no hay restricciones de capacidad. En el caso de que no haya restricciones de capacidad, los contratos deadd()
yoffer()
muestran el mismo comportamiento.fuente
Escribiré el código de ejemplo del contrato de Java para el método de oferta y agregaré el método que muestra en qué se diferencian.
fuente
Fuente: http://docs.oracle.com/javase/6/docs/api/java/util/Queue.html
El método de oferta inserta un elemento si es posible; de lo contrario, devuelve falso. Esto difiere del método Collection.add, que puede fallar al agregar un elemento solo lanzando una excepción sin marcar. El método de oferta está diseñado para usarse cuando la falla es una ocurrencia normal, más que excepcional, por ejemplo, en colas de capacidad fija (o "limitadas").
fuente