В классе 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);
}
instanceof - достаточно затратная операция. И если мы сразу присылаем SortedSet или PriorityQueue, то нет смысла тратить на это время. А вот если мы прислали Collection, то, какая конкретно пришла коллекция, никому не известно.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости