On Thu, 4 Jan 2024 15:34:03 GMT, Jason Mehrens <d...@openjdk.org> wrote:

>>> > I think this ticket should focus on adding the new constructor as part of 
>>> > the API.
>>> 
>>> Okay. I would think the code would avoid heapify when the caller does 
>>> foolish things with this API such as:
>>> 
>>> ```
>>> SortedSet ss = filledSortedSet();
>>> PriorityQueue pq1 = new PriorityQueue(ss.comparator(), ss);
>>> 
>>> PriorityQueue pq = filledPriorityQueue();
>>> PriorityQueue pq2 = new PriorityQueue(pq.comparator(), pq);
>>> ```
>>> 
>>> I assume this constructor is going to be added to TreeSet, 
>>> PriorityBlockingQueue, and ConcurrentSkipListSet?
>> 
>> why do you think the code would avoid heapify? `initFromCollection` method 
>> will be called regardless of the type of the collection passed, which will 
>> heapify the queue.
>> 
>> regarding adding the constructor to the other types mentioned, I believe I 
>> can be done, probably as part of a different ticket.
>
>> why do you think the code would avoid heapify? `initFromCollection` method 
>> will be called regardless of the type of the collection passed, which will 
>> heapify the queue.
> 
> I simply mean to point out:
> 
> 1.  That if the given comparator and the sortedset/priority queue comparator 
> are the same then the call to heapify should be avoided as this is what is 
> done in the [copy 
> constructor.](https://github.com/openjdk/jdk/blob/139abc453f9eeeb4763076298ec44573ab94a3b6/src/java.base/share/classes/java/util/PriorityQueue.java#L196)
> 2. This new API has an anti-pattern not present with the other constructors.

I think it's that @jmehrens arguing that the "set of constructors" should be 
settled and there shouldn't be more or less, like

> This new API has an anti-pattern not present with the other constructors.

In all honesty, our collection API docs is massively outdated, that we haven't 
even documented SequencedCollection since JDK 21; those "constructor parity" 
arguments are relics of the age of serialization and can be safely discarded.

> I assume this constructor is going to be added to TreeSet, 
> PriorityBlockingQueue, and ConcurrentSkipListSet?

Feel free to. If you submit a patch, we are more than glad to review it. An 
overhaul ("anti-pattern" in @jmehrens' words) caused by doing the right thing 
is not a reason not to do so.

-----------------

@archiecobbs You are right. I will create a CSR for this patch. Hope the 
original author can come back (just issue `/open` in a comment and bot will 
reopen PR), otherwise we can probably add such comparator+copy constructors to 
all these ordered collections.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/17045#issuecomment-2234768805

Reply via email to