Почему Java предоставляет два метода для удаления элемента из очереди?
Реализация Queue
в Java имеет два метода удаления элемента: One - это remove()
, который генерирует исключение, а другой - poll()
, который возвращает null
для пустой очереди. У меня есть два сомнения:
- Почему
Queue
имеет другую реализацию для удаления элемента?
- Какую реализацию использовать Когда?
Ответы
Ответ 1
В некоторых ситуациях он ожидал, что очередь будет пустой, и в тех случаях, когда метод, который не генерирует исключение, является подходящим. В других ситуациях это исключительное обстоятельство, что очередь пуста, и исключение является подходящим.
Исключение броска приводит к штрафу за производительность, и если это случай, когда вы ожидаете, что очередь будет пуста время от времени, вы не хотите обрабатывать логику queue-empty-catch как исключение - это как дорогостоящим и трудным для чтения.
В противном случае, когда вы не ожидаете, что очередь будет пустой, это признак ошибки программирования или некоторых других исключительных обстоятельств, которые она есть, и вы не хотите писать уродливый код проверки ошибок (например, проверка на нуль), потому что в этом случае это будет менее читаемо, чем улавливание исключения (которое вы можете сделать в другой области).
Ответ 2
Абстрактный класс AbstractQueue<E>
реализует Queue<E>
и определяет метод удаления.
Вы можете посмотреть исходный код:
public E remove() {
E x = poll();
if (x != null)
return x;
else
throw new NoSuchElementException();
}
Итак, как вы видите, метод remove()
использует poll()
.
Вы можете использовать тот, который вы предпочитаете.
Ответ 3
Когда вы знаете, как реагировать прямо сейчас и/или ожидать, что элементы будут отсутствовать, используйте опрос.
В противном случае используйте remove.
Ответ 4
Глядя на ответы, мне было непонятно, что и что, следовательно:
Прямо из API:
Методы remove() и poll() отличаются только поведением, когда очередь пуста: метод remove() генерирует исключение, а метод poll() возвращает null
Ответ 5
Иногда вам нужно вернуть значение null для пустой очереди, а иногда вы хотите, чтобы он обрабатывал пустую очередь как случай исключения.
Ответ 6
Remove()
метод отличается от опроса только тем, что он генерирует исключение, если эта очередь пуста.
![enter image description here]()
Ответ 7
Два метода используются по-разному в классических дискуссиях о структуре очереди. Я использую poll() в основном для извлечения элементов и удаления() в основном, если мне нужно изменить очередь за пределами обычного цикла.