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á false
se 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 Queue
interface:
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:true
se 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.