还是在讲原理之前,看一个简单的示例程序。
Set<Integer> st= new TreeSet<Integer>();
st.add(15);
st.add(16);
st.add(2);
st.add(1);
System.out.println(st);
[1, 2, 15, 16]
TreeSet是具有排序的特点的。通过源码看看它是如何实现排序的。
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
public TreeSet() {
this(new TreeMap<E,Object>());
}
TreeSet底层是TreeMap来实现的。看add底层调用的关键代码。
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);
原来是用二叉排序树来实现排序的。