A complexidade do tempo das operações comuns em um `priorityQueue` em Java depende da operação específica. Aqui está um colapso:
*
`add (e e)` / `oferta (e e)` (inserção): O (log n) - Isso ocorre porque a fila de prioridade precisa manter sua propriedade Heap, que requer peneirar o novo elemento para cima ou para baixo na pilha.
*
`remover ()` / `poll ()` (remoção do elemento de prioridade mais alta): O (log n) - A remoção do elemento raiz (maior prioridade) requer substituí -lo pelo último elemento e, em seguida, peneirando o elemento de substituição na pilha para restaurar a propriedade Heap.
*
`peek ()` (acessando o elemento de prioridade mais alta): O (1) - Espreitar o elemento de prioridade mais alta (a raiz da pilha) é uma operação de acesso direto.
*
`contém (objeto o)`: O (n) - Isso requer iterando através dos elementos da fila para verificar a igualdade. O PriorityQueues em Java não fornece uma maneira eficiente de verificar a contenção.
*
`remover (objeto o)`: O (n) - semelhante a `contém ()`, isso envolve iterando os elementos para encontrar e remover o objeto especificado. Depois de remover o objeto, a propriedade Heap deve ser mantida, que, na pior das hipóteses, pode levar o tempo O (n). (Remover um elemento arbitrário não é uma operação de fila de prioridade padrão, e o desempenho reflete isso.)
*
`size ()`: O (1) - O tamanho é mantido como uma variável de membro, portanto, acessar é uma operação de tempo constante.
*
`isEmpty ()`: O (1) - basta verificar se o tamanho é 0.
*
`clear ()`: O (n) - remove todos os elementos da fila. Embora a remoção de elementos individuais possa levar O (log n), a limpeza de toda a fila toma O (n). Em algumas implementações, isso pode ser implementado como O (1), apenas redefinindo a matriz e o tamanho internos.
*
`iterator ()`: O (1) - retorna um iterador para a fila de prioridade. O próprio iterador * não é * ordenado, e a iteração dos elementos será O (n).
Considerações importantes: *
`priorityqueue` é implementado como uma pilha binária. A estrutura de dados da heap é o que lhe dá seu desempenho logarítmico para inserção e remoção do elemento de prioridade mais alta.
*
O comparador é crucial. O comparador (ou a ordem natural dos elementos se nenhum comparador for fornecido) é o que determina a prioridade dos elementos. O método `Compare ()` do comparador deve ser eficiente (normalmente O (1)) para as operações gerais da fila de prioridade para manter sua complexidade declarada.
*
remover elementos arbitrários (`remover (objeto o)`) é ineficiente. Se você frequentemente precisar remover elementos arbitrários de uma fila de prioridade, considere o uso de uma estrutura de dados diferente ou uma combinação de estruturas de dados (por exemplo, um `Treeeset` combinado com um` hashmap` para rastrear as posições do elemento). As filas de prioridade padrão são otimizadas para acesso eficiente ao elemento de prioridade mais alta.
em resumo: As operações principais de `add ()` e `remover ()` (do * elemento prioritário * mais alto * são O (log n), tornando o `priorityqueue` uma opção muito eficiente para cenários em que você precisa manter uma coleção classificada e acessar repetidamente ou remover o elemento mínimo (ou máximo, dependendo do comparador).