1、二叉树
TreeSet集合是基于TreeMap的实现,而TreeMap是基于二叉树(红黑树)结构,也就是说TreeSet集合的底层使用的二叉树(红黑树)结构。
树结构:它也是数据结构中的一种。在计算机领域中树结构指的是倒立的树。
树结构存储的数据,每个数据也需要节点来保存。
而TreeSet集合底层是二叉树的数据结构,什么是二叉树呢?
二叉树:每个节点的下面最多只能有2个子节点。
说明:最多表示一个节点下面可以有两个子节点或者一个子节点或者没有子节点。
在二叉树的根节点左侧的节点称为左子树,在根节点的右侧的节点称为右子树。
二叉树的存储流程:
当存储一个元素的时候,如果是树的第一个元素,这个元素就作为根节点。
如果不是第一个元素,那么就拿要存储的元素与根节点进行比较大小:
大于根元素:就将要存储的元素放到根节点的右侧,作为右叶子节点。
等于根元素:丢弃。
小于根元素:就将要存储的元素放到根节点的左侧,作为左叶子节点。
总结:二叉树是通过比较大小来保证元素唯一和排序的。
使用TreeSet的时候需要类实现一个接口 Comparable这个接口去做比较排序
除了这种方法外,还有一种比较器的写法Comparator这个接口
2、使用比较器将数据存储到TreeSet中
如果想要使用比较器的写法 必须再new TreeSet的时候,加上比较器对象
TreeSet 有一个有参构造,有参构造的方法是Comparwator的对象
Comparator是一个接口 不能实例化,再写一个类去实现这个接口
Set<Student> set = new TreeSet<>(new Comparator<Student> () {
public int compare (Student o1, Student o2) {
return o1.age - o2.age;
}
}
3.匿名内部类
3.1基于抽象类的匿名内部类
匿名内部类:在实例化对抽象类同时并重写抽象方法
两种方法:
1、A a = new A( ){
//重写方法
}
a.方法名;
2、new b ( ){
//重写所有方法
}.方法名;
3.2基于接口的匿名内部类
与抽象匿名内部类一样
真实开发的时候,一个方法参数是一个接口对象,不用再新建一个类去实现这个接口,直接方法中去new 接口
4.内部类
从字面意思来理解:在类的内部创建一个类,这个类叫内部类
4.1成员内部类
在类的方法的外面在类中,就是成员内部类
成员内部类可以访问外部类的属性和方法
如果访问外部特定的属性的时候: 外部类名.this.属性
成员内部类的创建步骤:
//1.实例化外部类 类对象
MemberDemo memberDemo = new MemberDemo();
//2.实例化内部类对象,但是new得改为 外部对象.new
MemberDemo.Inner inner = memberDemo.new Inner();
inner.test();