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?
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?
Respostas:
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).
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:
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 ...
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, maisfalse...
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.