Qual é a diferença dos métodos add e offer do PriorityQueue do Java?

12

Em java.util.PriorityQueue , temos os métodos add(E e)e offer(E e). Ambos os métodos estão documentados como:

Insere o elemento especificado nessa fila de prioridade.

Quais são as diferenças entre esses dois métodos?

agent13
fonte

Respostas:

17

A diferença é que offer()retornará falsese não conseguir inserir o elemento em uma Fila de tamanho restrito , ao passo add()que lançará um IllegalStateException.

Você deve usar offer()quando a falha ao inserir um elemento seria normal e add()quando a falha seria uma ocorrência excepcional (que precisa ser tratada).

yannis
fonte
4

Para descobrir a diferença, é necessário seguir os javadocs da API PriorityQueue, que por sua vez têm as seções "Especificadas por" que referem o leitor aos respectivos métodos na Queueinterface:

  • Queue.add

    Insere o elemento especificado nessa fila, se for possível fazê-lo imediatamente, sem violar as restrições de capacidade, retornando true após o sucesso e lançando uma IllegalStateException se não houver espaço disponível no momento ...
    Retorna: true(conforme especificado por Collection.add (E) )
    Lança: IllegalStateException- se o elemento não puder ser adicionado no momento devido a restrições de capacidade ...

  • Queue.offer

    Insere o elemento especificado nessa fila, se for possível fazê-lo imediatamente, sem violar as restrições de capacidade. Ao usar uma fila com capacidade restrita, esse método geralmente é preferível adicionar (E), que pode falhar ao inserir um elemento apenas lançando uma exceção ...
    Retorna: truese o elemento foi adicionado a essa fila, mais false...

Ambos os métodos estão presentes porque eles precisam ser implementados pela interface declarada.

Observe que, como PriorityQueue é ilimitado (conforme indicado em javadocs: " fila de prioridade ilimitada com base em um heap de prioridade ..."), a preferência dos designers de API expressos acima não se aplica. Isso significa que fica a critério do programador escolher o método que melhor se adapte às suas necessidades em um contexto de uso específico.

mosquito
fonte
2
Pffft você foi e olhou para os documentos. Fraco. ; P
yannis
11
@YannisRizos A próxima coisa que você verá será eu reclamando como o coronel Shrapnel :) oh, você não pode competir com respostas de 30 segundos: uma pergunta receberá cinco respostas antes que você possa encontrar um link apropriado blá blá
gnat