关于compareTo()中的方法
//实现Comparable接口
public class Employee implements Comparable<Employee>{
//成员变量
private String id; //编号
private String name; //名字
private float price; //工资
//构造方法
public Employee(){}
public Employee(String id, String name, float price){
setId(id);
setName(name);
setPrice(price);
}
//getter和setter方法
public void setId(String id){
this.id = id;
}
public void setName(String name){
this.name = name;
}
public void setPrice(float price){
this.price = price;
}
public String getId(){
return id;
}
public String getName(){
return name;
}
public float getPrice(){
return price;
}
//toString()方法
public String toString(){
return "员工[编号:"+getId()+",姓名:"+getName()+",工资:"+getPrice()+"]";
}
public int compareTo(Employee e){
Float f = e.getPrice();
int n = f.compareTo(this.getPrice());
return n;
}
}import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class EmployeeTest{
public static void main(String[] args){
//定义Employee类的对象
Employee one = new Employee("emp001", "张三", 1800f);
Employee two = new Employee("emp002", "李四", 2500f);
Employee three = new Employee("emp003", "王五", 1600f);
//将对象添加到List中
List<Employee> list = new ArrayList<Employee>();
list.add(one);
list.add(two);
list.add(three);
//输出排序前的数据
System.out.println("排序前:");
for(Employee temp : list){
System.out.println(temp);
}
//排序
Collections.sort(list);
//输出排序后的数据
System.out.println("排序后:");
for(Employee temp : list){
System.out.println(temp);
}
}
}关于Employee中重写compareTo()方法:之前老师介绍可以用两数相减然后强转为int的方法,如果两数的差小于1而且大于0这种情况是不是就会出现问题。如果使用Float包装类中的compareTo(Float )方法,会不会也出现这个问题
3
收起
正在回答
1回答
同学你好,代码完成的不错,
对于强转为int的方法,如果两数的差小于1而且大于0是会出现问题。
如果使用Float包装类中的compareTo(Float )方法就会避免该问题~因为在Float的底层如果f1和f2相等,会在进行转化为十进制的数值,再进行比较。具体如下:

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星