集合框架_TreeSet保证元素排序的源码解析
interface Collection{...}interface Set extends Collection{...}interface NavigableMap{}class TreeMap implements NavigableMap{ public V put(K key, V value) { Entry t = root; if (t == null) { // TBD: // 5045147: (coll) Adding null to an empty TreeSet should // throw NullPointerException // // compare(key, key); // type check root = new Entry(key, value, null); size = 1; modCount++; return null; } int cmp; Entry 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 t.setValue(value); } while (t != null); } else { if (key == null) throw new NullPointerException(); Comparable super K> k = (Comparable super K>) key; do { parent = t; cmp = k.compareTo(t.key); if (cmp < 0) t = t.left; else if (cmp > 0) t = t.right; else return t.setValue(value); } while (t != null); } Entry e = new Entry(key, value, parent); if (cmp < 0) parent.left = e; else parent.right = e; fixAfterInsertion(e); size++; modCount++; return null; }}class TreeSet implements Set{ private transient NavigableMap m; public TreeSet(){ this(new TreeMap()); } public boolean add(E e) { return m.put(e, PRESENT)==null; }}真正比较的是依赖于元素的compareTo()方法,而这个方法是定义在Comparable里面的所以,你想要重写该方法,就必须是先Comparable接口。这个接口表示的就是自然排序。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~