¿Cuál es la diferencia de los métodos de agregar y ofrecer de PriorityQueue de Java?

12

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?

agente13
fuente

Respuestas:

17

La diferencia es que offer()volverá falsesi 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).

Yannis
fuente
4

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 Queueinterfaz:

  • Queue.add

    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: IllegalStateExceptionsi el elemento no se puede agregar en este momento debido a restricciones de capacidad ...

  • Queue.offer

    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: truesi el elemento se agregó a esta cola, de lo contrario false...

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.

mosquito
fuente
2
Pffft fuiste y miraste los documentos. Débiles. ; P
Yannis
1
Lo siguiente que verás en @YannisRizos sería que me quejara como Col Shrapnel :) oh, no puedes competir con respuestas de 30 segundos: una pregunta obtendrá 5 respuestas antes de que incluso puedas encontrar un enlace apropiado bla, bla
gnat