TreeSet是二叉树结构,何为二叉树呢,就是一层层向下分支,进来一个元素先和最上面一个节点比较,然后再顺次往下比较,注意:最高节点并不是第一次存进来的元素,而是中间那个元素,比如
存1--存2(和1比)---存3(和1比完和2比)|---存4(和2比完和3比)
|----存0(和2比完和1比)
往里面存元素时,比如里面已有A,存B时,是B调用compareTo和A比,
即B.compareTo(A),如返回正数,则说明B>A,B会排在A后面,负数则B<A, B会排在A前面。
里面的结构并不是树形结构,而是顺序排列的,插在一个左边比自己小而右边比自己大的位子。自左往右增大,只是添加元素比较时,先从中间开始比较,遇到大的往右比,遇到小了的往左比。验证代码如下:
import java.util.TreeSet;
public static void main(String[] args) {
TreeSet set = new TreeSet();
set.add(new Parent(1));
set.add(new Parent(8));
set.add(new Parent(4));
set.add(new Parent(3));
for(Object o:set){
Parent o1 = (Parent)o;
System.out.println(o1.age);
}
}
}
class Parent implements Comparable {
int age = 0;
public Parent(int age) {
this.age = age;
}
public int compareTo(Object o) {
Parent o1 = (Parent)o;
System.out.println("methodofparent"+this.age+"---"+o1.age);
return age>o1.age?1:age<o1.age?-1:0;
}
}
输出结果是method of parent1---1
method of parent8---1
method of parent4---1
method of parent4---8
method of parent3---4
method of parent3---1
1
3
4
8
完全验证了存储时是4插在了1和8之间,隔开了1和8.