Thanks, Jason!

The addAllAbsent() function has O(c.length^2) complexity, so
construction time quickly grows with the input size.
However, if we knew that c is a Set, we could construct the COWAS in
linear time.
You have to be able to prove that the given Set uses the same equivalence 
relation as the COWAS.  Otherwise, it will fall apart you pass a SortedSet with 
a Comparator or an identity set.

I relied on what the documentation [1] says: "sets contain no pair of elements e1 and e2 such that e1.equals(e2)". Further, [2] states: "the ordering maintained by a sorted set (whether or not an explicit comparator is provided) must be consistent with equals if the sorted set is to correctly implement the Set interface"

However you're right that if a class derived from Set is implemented inconsistently with equals (even though the documentation says it should not), the behavior of the constructor will change.

[1] http://docs.oracle.com/javase/7/docs/api/java/util/Set.html
[2] http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html

Sincerely,
Ivan
And if the c was known to be another COWAS, we could simply clone the
underlying CopyOnWriteArrayList.
That would be safe.

Jason                                   


Reply via email to