En java.util.PriorityQueue tenemos los métodos add(E e)
y offer(E e)
. Ambos métodos están documentados como:
Inserta el elemento especificado en esta cola de prioridad.
¿Cuáles son las diferencias entre estos dos métodos?
fuente
En java.util.PriorityQueue tenemos los métodos add(E e)
y offer(E e)
. Ambos métodos están documentados como:
Inserta el elemento especificado en esta cola de prioridad.
¿Cuáles son las diferencias entre estos dos métodos?
La diferencia es que offer()
volverá false
si no puede insertar el elemento en una cola de tamaño restringido , mientras add()
que arrojará un IllegalStateException
.
Debe usarlo offer()
cuando la falla al insertar un elemento sea normal, y add()
cuando la falla sea una ocurrencia excepcional (eso debe ser manejado).
Para descubrir la diferencia, es necesario seguir los javadocs de PriorityQueue API que a su vez tienen secciones "Especificadas por" que remiten al lector a los métodos respectivos en la Queue
interfaz:
Inserta el elemento especificado en esta cola si es posible hacerlo de inmediato sin violar las restricciones de capacidad, devolviendo verdadero al éxito y lanzando una IllegalStateException si no hay espacio disponible actualmente ...
Devuelve:true
(según lo especificado por Collection.add (E) )
Lanza:IllegalStateException
si el elemento no se puede agregar en este momento debido a restricciones de capacidad ...
Inserta el elemento especificado en esta cola si es posible hacerlo inmediatamente sin violar las restricciones de capacidad. Cuando se usa una cola de capacidad restringida, este método generalmente es preferible agregar (E), que puede fallar al insertar un elemento solo lanzando una excepción ...
Devuelve:true
si el elemento se agregó a esta cola, de lo contrariofalse
...
Ambos métodos están presentes porque estos deben implementarse mediante una interfaz declarada.
Tenga en cuenta que dado que PriorityQueue es ilimitado (como se indica en javadocs: " cola de prioridad ilimitada basada en un montón de prioridad ..."), la preferencia de los diseñadores de API expresada anteriormente no se aplica. Esto significa que queda a discreción del programador elegir el método que mejor se adapte a sus necesidades en un contexto de uso específico.