Set集合特点:
1.Set集合存储的元素不能重复,自动过滤掉重复元素;
2.Set集合是没有索引的,所以不能使用for循环来遍历,利用索引的增删改查都属不可以的
3.Set集合存取元素的顺序是不一致的.
TreeSet:
Set集合有的特点它都具有,但是它也有自己特有的特点,它可以根据规则将元素排序,在使用java已有的类时候,不需要制定规则,因为java提供了默认的规则.
一般我们有两种排序规则,一个是自然排序,一个是比较器排序
排序一般会有一个返回值,
返回值为负数表示存入元素是较小值,存左边.返回值为0则元素重复,不存入.返回值为正数元素是较大值,存右边.
自然排序:
在我们写自定义类的时候,就需要我们实现Comparable接口,并且重写compareTo方法,在我们创建TreeSet对象时就直接使用空参构造,在我们存储自定义类对象时,就会根据我们重写的compareTo方法来对对象进行排序
@Override
public int compareTo(Student o) {
//根据年龄进行排序
int i = this.age - o.age;
return i;
}
其中的this.age表示正在存的元素,o.age表示已经存在在集合中的元素,i就是返回值,根据i的正负来判断大小,若i=0;则说明元素存在就不会存入了,this.age要和存入的元素多次比较才能确定自己存的位置.
一般来说不会只根据一个条件判断,而是多个条件结合起来判断
比较器排序:在自然排序不满足我们的需求是就需要比较器排序
1.TreeSet的带参构造方法使用比较器排序对元素进行排序的2.比较器排序,就是让集合接收Comparator的实现类对象,重写compare()方法,一定要按照主要条件和次要条件来写
TreeSet<String > ts =new TreeSet<>(
//匿名内部类接收Comparator的实现类对象,重写compare()方法
new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
//主要条件:根据长度排序
int i = o1.length() - o2.length();
//次要条件:长度相同根据字典顺序排序
i=i==0?o1.compareTo(o2):i;
return i;
}
});
o1就是正在存入的字符串,o2就是已经存入的字符串,我们先将两个字符串长短进行比较,这是排序的主要条件,要是长度相同,则我们需要按照次要条件,就是字典顺序来排序
TreeSet主要是用到树结构