向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;
	}
}

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


以上,多谢观看。

好的,你的问题是关于如何实现员工对象TreeSet中按照指定规则排序的问题吗?那么对于这个问题,我可以给你一些思路和代码示例。 首先,我们可以定义一个Employee类,包含name和age两个属性,并且实现Comparable接口,重写compareTo方法,按照指定的规则排序。代码如下: ``` public class Employee implements Comparable<Employee> { private String name; private int age; public Employee(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "Employee{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public int compareTo(Employee o) { if (this.age != o.age) { return o.age - this.age; } else { return o.name.length() - this.name.length(); } } } ``` 在这个类中,我们重写了compareTo方法,如果两个Employee对象的age不相同,则按照age降序排列,如果age相同,则按照name的长度降序排列。 接下来,我们可以使用TreeSet来存储多个Employee对象,并且默认按照compareTo方法的规则排序。代码示例如下: ``` public class Main { public static void main(String[] args) { TreeSet<Employee> employees = new TreeSet<>(); employees.add(new Employee("Tom", 25)); employees.add(new Employee("Jerry", 30)); employees.add(new Employee("Mike", 25)); employees.add(new Employee("Peter", 30)); employees.add(new Employee("Mary", 20)); employees.add(new Employee("John", 20)); for (Employee employee : employees) { System.out.println(employee); } } } ``` 在这个示例中,我们创建了一个TreeSet对象,并且向其中添加了多个Employee对象。由于Employee类实现了Comparable接口,并且重写了compareTo方法,因此TreeSet会按照规则自动排序。最后,我们遍历TreeSet中的元素,并且依次输出它们的信息。 希望这个回答能够对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值