Tome, PriorityQueuepor ejemplo, http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html#offer(E)
¿Alguien puede darme un ejemplo de Queuedónde los métodos addy offerson diferentes?
Según el Collectiondocumento, el addmétodo a menudo buscará garantizar que un elemento exista dentro del en Collectionlugar de agregar duplicados. Entonces mi pregunta es, ¿cuál es la diferencia entre los métodos addy offer?
¿Es que el offermétodo agregará duplicados independientemente? (Dudo que sea porque si a Collectionsolo tuviera elementos distintos, esto eludiría eso).
EDITAR: En PriorityQueuelos métodos addy offerson el mismo método (vea mi respuesta a continuación). ¿Alguien puede darme un ejemplo de una clase donde los métodos addy offerson diferentes?

offervsadd.No hay diferencia para la implementación de
PriorityQueue.add:Porque en
AbstractQueuerealidad hay una diferencia:fuente
addmétodo sea diferente aloffermétodo?La diferencia entre
offeryaddse explica por estos dos extractos de los javadocs:Desde la
Collectioninterfaz:Desde la
QueueinterfazPriorityQueuees unaQueueimplementación que no impone restricciones de inserción. Por lo tanto, los métodosaddyoffertienen la misma semántica.Por el contrario,
ArrayBlockingQueuees una implementación en la queoffery seaddcomportan 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
Queueinterfaz especifica queadd()arrojará unIllegalStateExceptionsi no hay espacio disponible actualmente (y de lo contrario regresarátrue) mientrasoffer()que regresaráfalsesi el elemento no se pudo insertar debido a restricciones de capacidad.La razón por la que son iguales en a
PriorityQueuees 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