Разница между add(E e) и предложением (E e) класса ArrayDqueue

Привет, я использовал add и предлагаю добавить свой элемент в последнем темпе. Оба возвращают логическое значение, и оба не выдают никаких исключений, кроме NPE.

 public class ArrayDequeDemo {

  public static void main(String[] args) {


    // Create ArrayDeque elements.
    ArrayDeque<Integer> deque = new ArrayDeque<>();
    deque.add(10);
    deque.offer(30);

   }
 }

Оба добавят элемент на последнем месте, возвращая логическое значение.

JAVA РЕАЛИЗАЦИЯ

//For Add and Offer Both
   public void addLast(E e) {
    if (e == null)
        throw new NullPointerException();
    elements[tail] = e;
    if ( (tail = (tail + 1) & (elements.length - 1)) == head)
        doubleCapacity();
}

4 ответа

Два метода эквивалентны.

Причина того, что они оба существуют, состоит в том, что java.util.Queue Интерфейс определяет оба.

Причина того, что java.util.Queue указывает на то, что реализация java.util.Queue разрешено реализовывать ограничения емкости, и эти два метода определены так, чтобы вести себя по-разному в случае, если добавление элемента нарушит это ограничение; В частности, add(...) указано бросить IllegalStateException в этом случае, тогда как offer(...) просто возвращается false,

java.util.ArrayDequeue Однако не вводятся какие-либо ограничения емкости, поэтому такая ситуация не возникает с ним, поэтому различие не применяется.

Queue Документация довольно хорошо объясняет разницу.

  • add(E e) может генерировать исключение, если элемент не может быть добавлен в очередь. Это происходит в случае, если очередь заполнена.

  • offer(E e) вернет специальное значение (в данном случае логическое), если значение не может быть добавлено в очередь. Это полезно, если вы имеете дело с очередью с ограниченным размером, но не хотите создавать исключение.

В Java SE 8

  • логическое сложение (E e)

    Вставляет указанный элемент в очередь, представленную этим deque (другими словами, в хвосте этого deque), если это возможно сделать немедленно, не нарушая ограничения емкости, возвращая true в случае успеха и выбрасывая исключение IllegalStateException, если в настоящее время нет свободного места,
    При использовании deque с ограниченной емкостью, как правило, предпочтительнее использовать предложение (E e).

    Вставляет указанный элемент в конце этой очереди.
    Этот метод эквивалентен addLast(E).

  • булево предложение (E e)

    Вставляет указанный элемент в очередь, представленную этим deque (другими словами, в хвосте этого deque), если это возможно сделать немедленно, не нарушая ограничения емкости, возвращая true при успехе и false, если в настоящее время нет свободного места.
    При использовании deque с ограниченной емкостью этот метод, как правило, предпочтительнее метода add(E), который может не вставить элемент, только вызвав исключение.

    Вставляет указанный элемент в конце этой очереди.
    Этот метод эквивалентен offerLast(E).

offer(E e) метод не скинет IllegalStateException если в данный момент нет свободного места, он вернет false, если свободного места нет

но add(E e) метод бросит IllegalStateException если в данный момент нет свободного места

и другие вещи такие же.

Другие вопросы по тегам