Когда логический метод add (E element) связанного списка в Java возвращает false - PullRequest
2 голосов
/ 19 сентября 2019

Когда логический метод add (E element) связанного списка в java возвращает false?

Я исследовал реализацию LinkedList и обнаружил, что логический метод add (E element) эквивалентен методу void addLast (E element)

Единственное отличие -

Реализация метода addLast (E element):

void addLast(E e) {
        Node<E> l = last;
        Node<E> newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
    }

Реализация метода add (E element):

boolean add(E e) {
        addLast(e);
        return true;
    }

Ответы [ 2 ]

4 голосов
/ 19 сентября 2019

Поскольку java.util.LinkedList реализует интерфейс Collection, а метод add() в этом интерфейсе должен возвращать значение true, если коллекция изменилась в результате операции.Для связанного списка это всегда верно.

Вот пример, в котором add() возвращает ложь:

Set<Integer> set = new HashSet<>();
System.out.println(set.add(1));
System.out.println(set.add(2));
System.out.println(set.add(1));

Выходы:

true
true
false

Третий add возвращает ложь просто потому, что набор имеетне изменился в результате операции (он уже содержал 1).

2 голосов
/ 19 сентября 2019

Это всегда возвращает истину.Он должен возвращать логическое значение, поскольку реализуемый им интерфейс (java.util.List) заставляет его возвращать логическое значение.

/**
 * Appends the specified element to the end of this list.
 *
 * <p>This method is equivalent to {@link #addLast}.
 *
 * @param e element to be appended to this list
 * @return {@code true} (as specified by {@link Collection#add})
 */
public boolean add(E e) {
    linkLast(e);
    return true;
}

Однако java.util.Set ведет себя иначе.Он добавляет элементы только в том случае, если нет одинаковых элементов (согласно Object.equals()).Как и в случае с @jrook, он вернет false, если добавленный вами элемент уже существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...