Set系列集合

## Set系列集合

TreeSet: 不重复,无索引,按照大小默认升序排序!!

TreeSet集合自排序的方式:

​ 1.有值的元素直接升序排序。(浮点型,整型)

​ 2.字符串类型元素按照首字符的编号排序。

​ 3.自定义引用数据类型,TreeSet默认无法排序,执行的时报错(不知道排序规则)。

自定义的引用数据类型的排序实现方式

制定排序的大小规则,方案有2种:

a.重写比较方法(拓展方式),类中实现接口(Comparable)

​ 比较者大于被比较者 返回正数!

​ 比较者小于被比较者 返回负数!

​ 比较者等于被比较者 返回0!

b.在集合中设置比较器(Comparator),重写比较方法

​ 比较者大于被比较者 返回正数!

​ 比较者小于被比较者 返回负数!

​ 比较者等于被比较者 返回0!

注意:如果类和集合都带有比较规则,优先使用集合自带的比较规则

import java.util.*;

public class TreeSetDemo05 {
    public static void main(String[] args) {
        //TreeSet:排序不重复集合
        Set scores = new TreeSet<>();
        scores.add(100.0);
        scores.add(99.9);
        scores.add(69.5);
        scores.add(0.1);
        scores.add(89.3);
        System.out.println(scores);

        //按照字符的ASCII码进行排序
        Set names = new TreeSet<>();
        names.add("Jack");
        names.add("rose");
        names.add("Dlei");
        names.add("曹雪芹");
        names.add("about");
        names.add("bozai");
        names.add("caocao");
        names.add("Angle");
        System.out.println(names);

        //引用数据类型方案a
        Set employees = new TreeSet<>();
        employees.add(new Employee("波仔",6500.00,21));
        employees.add(new Employee("波妞",7500.00,20));
        employees.add(new Employee("乔治",4500.00,23));
        System.out.println(employees);
        
        //引用数据类型方案b
        //public TreeSet(Comparator comparator)
        //集合自带比较器对象实际开发中
        Set employees1 = new TreeSet<>(new TreeSet<>(new Comparator() {
            @Override
            public int compare(Employee o1, Employee o2) {
                return o1.getAge()-o2.getAge();
            }
        }));
        employees1.add(new Employee("波仔",6500.00,21));
        employees1.add(new Employee("波妞",7500.00,20));
        employees1.add(new Employee("乔治",4500.00,23));
        System.out.println(employees1);
    }
}
public class Employee implements Comparable{
    private String name;
    private double salary;
    private int age;
    
    //重写比较方法
    //需求:按照年龄比较
    @Override
    public int compareTo(Employee o) {
//        if(this.age > o.age)
//            return 1;
//        else if (this.age < o.age)
//            return -1;
//        return 0;
        
        //优雅式代码
        return this.age-o.age;
    }
	//省略get,set,toString方法
}

你可能感兴趣的:(Java进阶(技术类),java,jvm,算法)