Veja, PriorityQueue
por exemplo, http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html#offer(E)
Alguém pode me dar um exemplo de Queue
onde os métodos add
e offer
são diferentes?
De acordo com o Collection
doc, o add
método frequentemente buscará garantir que um elemento exista no em Collection
vez de adicionar duplicatas. Portanto, minha pergunta é: qual é a diferença entre os métodos add
e offer
?
O offer
método adicionará duplicatas independentemente? (Duvido que seja porque se a Collection
tivesse apenas elementos distintos, isso contornaria isso).
EDIT: Em um PriorityQueue
os métodos add
e offer
são o mesmo método (veja minha resposta abaixo). Alguém pode me dar um exemplo de classe onde os métodos add
e offer
são diferentes?
offer
vsadd
.Não há diferença para a implementação de
PriorityQueue.add
:Pois
AbstractQueue
realmente há uma diferença:fonte
add
método seja diferente dooffer
método?A diferença entre
offer
eadd
é explicada por estes dois trechos dos javadocs:Na
Collection
interface:Da
Queue
interfacePriorityQueue
é umaQueue
implementação que não impõe nenhuma restrição de inserção. Portanto, os métodosadd
eoffer
têm a mesma semântica.Por outro lado,
ArrayBlockingQueue
é uma implementação na qualoffer
eadd
se comporta de maneira diferente, dependendo de como a fila foi instanciada.fonte
A diferença é a seguinte:
método de oferta - tenta adicionar um elemento a uma fila e retorna falso se o elemento não puder ser adicionado (como no caso de uma fila cheia), ou verdadeiro se o elemento foi adicionado, e não lança nenhuma exceção específica .
add method - tenta adicionar um elemento a uma fila, retorna true se o elemento foi adicionado ou lança uma IllegalStateException se nenhum espaço estiver disponível no momento.
fonte
do código-fonte em jdk 7 da seguinte forma:
podemos saber facilmente que a função add retornará true quando adicionar com sucesso um novo elemento na fila, mas lançará uma exceção quando falhar.
fonte
A
Queue
interface especifica queadd()
lançará umIllegalStateException
se nenhum espaço estiver disponível no momento (e caso contrário, retornarátrue
) enquantooffer()
retornaráfalse
se o elemento não puder ser inserido devido a restrições de capacidade.A razão pela qual eles são iguais em a
PriorityQueue
é que essa fila é especificada para ser ilimitada, ou seja, não há restrições de capacidade. No caso de não haver restrições de capacidade, os contratos deadd()
eoffer()
apresentam o mesmo comportamento.fonte
Escreverei o código de exemplo do contrato java para o método de oferta e adicionarei o método mostrando como eles diferem.
fonte
Fonte: http://docs.oracle.com/javase/6/docs/api/java/util/Queue.html
O método de oferta insere um elemento se possível, caso contrário, retorna false. Isso difere do método Collection.add, que pode falhar ao adicionar um elemento apenas lançando uma exceção não verificada. O método de oferta é projetado para uso quando a falha é normal, ao invés de uma ocorrência excepcional, por exemplo, em filas de capacidade fixa (ou "limitadas").
fonte