创建一个教师类,存入集合,按照年龄,工资和名字排序,并且去重

创建一个教师类(teacher),属性age name salary,创建10个教师对象,装入treeset中,通过设置teacher类,保证age大的在前面,age相同salary小的在前面,salary相同 name小的在前面。三个属性相同的为同一对象,不能重复添加进集合


import java.text.Collator;
import java.util.*;

/**
 * 老师类
 */
public class Teacher implements Comparable<Teacher> {
    private int age;//年龄
    private String name;//名字
    private double salary;//薪水


    /**
     * 存储自定义对象时,想要达到去重的效果.就需要重写equals和hashcode
     * 	 1. 当调用add方法存储元素时,会先调用元素的hashcode方法获得对象的地址
     * 	 2. 拿着对象的地址与之前集合中已经存在的地址比较
     * 	 3. 如果hashcode值不一样,直接存储
     * 	 4. 如果hashcode值一样,继续调用元素的equals和原来已存在的元素比较内容
     * 	 5. 如果equals比较的内容也一样.那么该元素就不向集合中存储.
     * 	 6. 如果equals比较的内容不一样,那么就认为该元素与集合中原有的元素不相同,就
     * 	    向集合中存储
     *
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Teacher teacher = (Teacher) o;
        return age == teacher.age &&
                Double.compare(teacher.salary, salary) == 0 &&
                Objects.equals(name, teacher.name);
    }
    @Override
    public int hashCode() {
        return Objects.hash(age, name, salary);
    }
    public Teacher(){}
    public Teacher(int age, String name, double salary) {
        this.age = age;
        this.name = name;
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", salary=" + salary +
                '}';
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    /**
     * compareTo 自然比较方法。
     * 如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
     * 返回 零 即认为重复,不存储
     * 返回 负整数 即插入的元素放入之前那个元素前面
     * 返回 正整数 即插入的元素放入之前那个元素后面
     * --------------
     * 该对象是正在存储的元素对象,即this
     * 指定对象: 之前已存在元素
     */

    @Override
    public int compareTo(Teacher o) {
       if(this.age==o.age&&this.name.equals(o.name)&&this.salary==o.salary){
            return 0;
        }
        if(o.age == this.age){
            if(this.salary==o.salary){
              //根据名字长度
//                int a = o.name.length()-this.name.length();
//                if(a==0){
//                    return -1;
//                }
//                return a;
              //根据名字内容
             //return  o.name.compareTo(this.name);

                //根据名字内容中文汉字排序
                Comparator<Object> CHINA_COMPARE = Collator.getInstance(java.util.Locale.CHINA);
                return CHINA_COMPARE.compare(this.name,o.name);

            }
            return  (int) (this.salary-o.salary);
        }
        return o.age-this.age;
    }
}
import java.util.TreeSet;

/**
 * 教师测试排序类
 */
public class TEstTeacher {
    public static void main(String[] args) {
        TreeSet<Teacher> teachers = new TreeSet<>();
        teachers.add(new Teacher(18,"鲁班",1822));
        teachers.add(new Teacher(19,"妲己",1500));
        teachers.add(new Teacher(20,"英才",1800));
        teachers.add(new Teacher(21,"见过",4000));
        teachers.add(new Teacher(22,"爱国",1422));
        teachers.add(new Teacher(22,"翠花",4222));
        teachers.add(new Teacher(40,"天生",7422));
        teachers.add(new Teacher(40,"崔2",1880));
        teachers.add(new Teacher(18,"杨盖飞",1542));
        teachers.add(new Teacher(40,"啊",1880));
        teachers.add(new Teacher(58,"景区",1822));
        teachers.add(new Teacher(40,"啊",1880));
        teachers.add(new Teacher(40,"吧",1880));

       for (Teacher t :teachers){
           System.out.println(t);
       }
    }

}

效果图效果

猜你喜欢

转载自blog.csdn.net/CV_Ming/article/details/111332411