ArrayDeque класс Deque - PullRequest
       18

ArrayDeque класс Deque

0 голосов
/ 11 апреля 2011

Поскольку класс 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){
}

Ответы [ 4 ]

1 голос
/ 11 апреля 2011

ArrayDeque имеет потенциальные проблемы с пропускной способностью, которые означают, что он может выбросить. Он удваивает емкость каждый раз, когда расширяется, поэтому в конечном итоге он больше не может удвоиться. Одна реализация кода делает следующее:

private void doubleCapacity() {
    int n = elements.length;
    int newCapacity = n << 1;
    if (newCapacity < 0)
        throw new IllegalStateException("Sorry, deque too big");
}

При определении addFirst, как указано ниже, этот метод может выдавать как минимум два исключения, описанных в документации по интерфейсу.

public void addFirst(E e) {
    if (e == null)
        throw new NullPointerException();
    elements[head = (head - 1) & (elements.length - 1)] = e;
    if (head == tail)
        doubleCapacity();
}

Как уже упоминалось, JavaDoc в интерфейсе просто дает возможные исключения. Ни один из типов, которые он выбрасывает, не является проверенным исключением, поэтому вы не обязаны их ловить.

1 голос
/ 11 апреля 2011

Единственное исключение, которое ArrayDequeue.addFirst() задокументировано для выброса , это NullPointerException. Поскольку это непроверенное исключение, вам не нужен этот блок catch.

0 голосов
/ 11 апреля 2011

A Deque throws IllegalStateException, поскольку Java позволяет вам использовать другую или создать собственную реализацию Deque, которая может иметь ограничения по размеру.ArrayDeque не генерирует эти исключения, поэтому, если вы абсолютно уверены, что ваш код будет использовать ArrayDeque, объявите их как таковые, и они не будут выбрасывать IllegalStateException

0 голосов
/ 11 апреля 2011

Некоторые реализации Deque связаны (т. Е. Ограничены по емкости), некоторые - нет.Такие методы, как addFirst, выдают IllegalStateException, если предел достигнут.Другие методы, такие как offerFirst, возвращают логическое значение для указания того же результата.

Если вы не хотите обрабатывать потенциальное исключение или знаете, что его не будет, просто используйте offerFirstи игнорировать результат.

...