PriorityQueue - в классе объявлены избыточные конструкторы?

162
07 мая 2019, 05:10

В классе PriorityQueue определен конструктор, который принимает аргументом Collection. В этом конструкторе имеется проверка аргумента на соответствие типамSortedSet и PriorityQueue:

public PriorityQueue(Collection<? extends E> c) {
    if (c instanceof SortedSet<?>) {
        SortedSet<? extends E> ss = (SortedSet<? extends E>) c;
        this.comparator = (Comparator<? super E>) ss.comparator();
        initElementsFromCollection(ss);
    }
    else if (c instanceof PriorityQueue<?>) {
        PriorityQueue<? extends E> pq = (PriorityQueue<? extends E>) c;
        this.comparator = (Comparator<? super E>) pq.comparator();
        initFromPriorityQueue(pq);
    }
    else {
        this.comparator = null;
        initFromCollection(c);
    }
}

С какой целью тогда разработчики класса добавили отдельные конструкторы, принимающие в аргументе SortedSet:

public PriorityQueue(SortedSet<? extends E> c) {
    this.comparator = (Comparator<? super E>) c.comparator();
    initElementsFromCollection(c);
}

и PriorityQueue:

public PriorityQueue(PriorityQueue<? extends E> c) {
    this.comparator = (Comparator<? super E>) c.comparator();
    initFromPriorityQueue(c);
}
Answer 1

instanceof - достаточно затратная операция. И если мы сразу присылаем SortedSet или PriorityQueue, то нет смысла тратить на это время. А вот если мы прислали Collection, то, какая конкретно пришла коллекция, никому не известно.

READ ALSO
Наличие аналога python exec в java

Наличие аналога python exec в java

Есть ли в Java функция, аналогичная функции exec в Python? Нигде не могу найти внятного ответа - есть или нетЕсли есть, то хорошо было бы ее назвать

126
Сохранение даты в RethinkDB

Сохранение даты в RethinkDB

В RethinkDB нужно сохранить документ, в котором содержится несколько полей с датамиПо этим датам нужно будет искать документы в RethinkDB

141
Что означает direction &ldquo;1&rdquo; canScrollVertically(1)? [закрыт]

Что означает direction “1” canScrollVertically(1)? [закрыт]

На что влияет параметр 1 в recyclerViewcanScrollVertically(1)

137
Обьясните значение [закрыт]

Обьясните значение [закрыт]

Обьясните значение этого конструкотора, зачем он нужен и что он делает?

163