Hi Tagir, > What if it's TreeSet with custom comparator which may differentiate elements > equal by .equals()? Or, even simpler, Collections.newSetFromMap(new > IdentityHashMap<>())? In both cases Set.of(array) would throw.
You are right. I haven't thought about this cases. OK, then we should at least add an optimisation for the case where coll is an instance of HashSet: diff --git a/src/java.base/share/classes/java/util/Set.java b/src/java.base/share/classes/java/util/Set.java --- a/src/java.base/share/classes/java/util/Set.java +++ b/src/java.base/share/classes/java/util/Set.java @@ -723,6 +723,8 @@ static <E> Set<E> copyOf(Collection<? extends E> coll) { if (coll instanceof ImmutableCollections.AbstractImmutableSet) { return (Set<E>)coll; + } else if (coll instanceof HashSet<?>) { + return (Set<E>)Set.of(coll.toArray()); } else { return (Set<E>)Set.of(new HashSet<>(coll).toArray()); } Best regards, Andrej Golovnin