向TreeSet集合中加入5个员工的对象,根据员工的年龄(升序)进行排序,若年龄相同,再根据 工龄(降序)来排序,若工龄相同,根据薪水(降序)排序

题目要求:

        向TreeSet集合中加入5个员工的对象,根据员工的年龄(升序)进行排序,若年龄相同,再根据
 工龄(降序)来排序,若工龄相同,根据薪水(降序)排序


分析一下? 我想还是不用了,题目已经给的很清晰了。就是一个员工类Employee   一个测试类  一个自己定义的MyComparator类实现了Comparator接口(如果你在Employee类中重写了compareTo方法,那就省略这个类,虽然我不推荐,毕竟后期要求变化的时候不好改)


第一种:(推荐写法)自定义的MyComparator类实现Comparator接口

01   MyComparator类

package cn.ketang.zuoye03;

import java.util.Comparator;

public class MyComparator implements Comparator<Employee> {

	@Override
	public int compare(Employee s1, Employee s2) {
	    
		int num = s1.getAge() - s2.getAge();
        //如果年龄相同,那我们比较工龄
		int num2 = num == 0 ? (s2.getServiceDays() - s1.getServiceDays()) : num;
        //如果工龄又相同,那我们比较薪水
		int num3 = num2 == 0 ? (int) (s2.getSalary() - s1.getSalary()) : num2;
        //如果薪水也相同,哎,你两不会是同一个人吧,我们在比较下名字。
		int num4 = num3 == 0 ? s1.getName().compareTo(s2.getName()) : num3;

		return num4;
	}
}

02   Employee类

package cn.ketang.zuoye03;

public class Employee {// implements Comparable<Employee>
	private String name;
	private int age;
	private int ServiceDays;
	private int salary;

	public Employee() {

	}

	public Employee(String name, int age, int serviceDays, int salary) {
		super();
		this.name = name;
		this.age = age;
		ServiceDays = serviceDays;
		this.salary = salary;
	}

	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

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

	public int getServiceDays() {
		return ServiceDays;
	}

	public void setServiceDays(int serviceDays) {
		ServiceDays = serviceDays;
	}

	public double getSalary() {
		return salary;
	}

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

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "姓名是:" + name + "年龄是:" + age + "工龄是:" + ServiceDays + "薪水是:" + salary;
	}
}

03   测试类

package cn.ketang.zuoye03;

import java.util.TreeSet;

public class MyTreeSetTest {
	public static void main(String[] args) {
		TreeSet<Employee> ts = new TreeSet<Employee>(new MyComparator());
		Employee e = new Employee("wujulan", 18, 2, 5555);
		Employee e1 = new Employee("wujulan", 18, 3, 5521);
		Employee e2 = new Employee("wufa", 18, 3, 5521);// 和e1的区别是仅仅名字不一样
		ts.add(new Employee("战三", 18, 2, 5623));//不要问我为什么用匿名对象写
		ts.add(new Employee("lisi", 49, 1, 5000));
		ts.add(new Employee("wamg2", 19, 3, 6000));
		ts.add(e);
		ts.add(e);// 不能添加重复的,也填不进去,Mycomparator比较时返回值为0,就不添加,毕竟底层是一个红黑树,每添加一个元素都要从根节点往下比较
		ts.add(e1);
		ts.add(e2);

		for (Employee employee : ts) {
			System.out.println(employee);
		}
	}
}


第二个就是我不推荐的写法,耦合性相较一而言较高

测试类还是测试类,然后在Employee类中实现一个Comparator接口,并重写compareTo方法(反正你不写,编译器也会提示你写的)

直接贴上去Employee类

package cn.ketang.zuoye03;

public class Employee implements Comparable<Employee> {
	private String name;
	private int age;
	private int ServiceDays;
	private int salary;

	public Employee() {

	}

	public Employee(String name, int age, int serviceDays, int salary) {
		super();
		this.name = name;
		this.age = age;
		ServiceDays = serviceDays;
		this.salary = salary;
	}

	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

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

	public int getServiceDays() {
		return ServiceDays;
	}

	public void setServiceDays(int serviceDays) {
		ServiceDays = serviceDays;
	}

	public double getSalary() {
		return salary;
	}

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

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "姓名是:" + name + "年龄是:" + age + "工龄是:" + ServiceDays + "薪水是:" + salary;
	}

	@Override
	public int compareTo(Employee s2) {

		int num = this.getAge() - s2.getAge();

		int num2 = num == 0 ? (s2.getServiceDays() - this.getServiceDays()) : num;

		int num3 = num2 == 0 ? (int) (s2.getSalary() - this.getSalary()) : num2;

		int num4 = num3 == 0 ? this.getName().compareTo(s2.getName()) : num3;

		return num4;
	}
}

结果来一波,排版没调,请多担待。


以上,多谢观看。

猜你喜欢

转载自blog.csdn.net/xiaoxin1024/article/details/81411780