> HashSet/TreeSet could do what ConcurrentHashMap/ConcurrentSkipListSet do by > using the "this contains that and that contains this" logic.
Yes, at the cost of yet another performance regression. But how about this problem: Comparator<String> cc = String.CASE_INSENSITIVE_ORDER; Set<String> s1 = new TreeSet<>(cc); Set<String> s2 = new TreeSet<>(cc); s1.add("hello"); s2.add("Hello"); s1.equals(s2) -> true s2.equals(s1) -> true s1.hashCode() == s2.hashCode() -> false