#java #arrays #collections #deque #java-6
#java #массивы #Коллекции #deque #java-6
Вопрос:
Поскольку класс ArrayDeque реализует Deque и поскольку у него нет никаких ограничений по емкости. Какова цель таких методов, вызывающих исключения, как addFirst()
, addLast()
и т.д.? Он добавит элементы в любом случае, поскольку массив не имеет границ. Может кто-нибудь, пожалуйста, объяснить реализацию, в которой мы могли бы использовать внутри try{}catch{}
блока, и сценарий, в котором addFirst мог бы выдавать исключение?
try{ArrayDeque adObj = new ArrayDeque();
adObj.addFirst("Oracle");//we can keep on adding first. Use to exception handling?
}catch(Exception e){
}
Ответ №1:
ArrayDeque
имеет потенциальные проблемы с пропускной способностью, которые означают, что он может привести к сбою. Он удваивает емкость каждый раз, когда он расширяется, поэтому в конечном итоге он больше не может удваиваться. Одна из реализаций кода выполняет следующее:
private void doubleCapacity() {
int n = elements.length;
int newCapacity = n << 1;
if (newCapacity < 0)
throw new IllegalStateException("Sorry, deque too big");
}
С приведенным ниже определением addFirst
being этот метод может генерировать по крайней мере два исключения, описанных в документации по интерфейсу.
public void addFirst(E e) {
if (e == null)
throw new NullPointerException();
elements[head = (head - 1) amp; (elements.length - 1)] = e;
if (head == tail)
doubleCapacity();
}
Как упоминали другие, JavaDoc в интерфейсе просто предоставляет возможные исключения. Ни один из типов, которые он выдает, не является проверяемыми исключениями, поэтому вы не вынуждены их перехватывать.
Ответ №2:
Единственное исключение, которое ArrayDequeue.addFirst()
задокументировано для выброса, является NullPointerException
. Поскольку это непроверенное исключение, вам не нужен этот блок catch.
Ответ №3:
Некоторые реализации Deque
ограничены (т. е. ограничены по емкости), некоторые — нет. Такие методы, как addFirst
выдают IllegalStateException
, если предел был достигнут. Другие методы, такие как offerFirst
возвращают логическое значение, указывающее на тот же результат.
Если вы не хотите обрабатывать потенциальное исключение или знаете, что его не будет, просто используйте offerFirst
и игнорируйте результат.
Ответ №4:
Deque
Выдает IllegalStateException
ошибку, потому что Java позволяет вам использовать другую реализацию Deque
или создавать свою собственную, которая может иметь ограничения по размеру. ArrayDeque
не генерирует эти исключения, поэтому, если вы абсолютно уверены, что ваш код будет использовать ArrayDeque
, объявите их как таковые, и они не будут генерировать IllegalStateException