Разница между 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)
вернет специальное значение (в данном случае логическое), если значение не может быть добавлено в очередь. Это полезно, если вы имеете дело с очередью с ограниченным размером, но не хотите создавать исключение.
логическое сложение (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
если в данный момент нет свободного места
и другие вещи такие же.