TreeSet去重分两种,第一种是我们重写了Comparator匿名类,第二种则是没有重写。
一,我们先分析一下没有重写的情况,当我们没有重写Comparator匿名类时
首先可以看看TreeSet的主要去重源代码
public V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) { Objects.requireNonNull(remappingFunction); Objects.requireNonNull(value); Entry<K,V> t = root; if (t == null) { addEntryToEmptyMap(key, value); return value; } int cmp; Entry<K,V> parent; // split comparator and comparable paths Comparator<? super K> cpr = comparator; if (cpr != null) { do { parent = t; cmp = cpr.compare(key, t.key); if (cmp < 0) t = t.left; else if (cmp > 0) t = t.right; else return mergeValue(t, value, remappingFunction); } while (t != null); }