Подтвердить что ты не робот

Почему Java предоставляет два метода для удаления элемента из очереди?

Реализация Queue в Java имеет два метода удаления элемента: One - это remove(), который генерирует исключение, а другой - poll(), который возвращает null для пустой очереди. У меня есть два сомнения:

  • Почему Queue имеет другую реализацию для удаления элемента?
  • Какую реализацию использовать Когда?
4b9b3361

Ответ 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() в основном для извлечения элементов и удаления() в основном, если мне нужно изменить очередь за пределами обычного цикла.