关于compareTo()中的方法

关于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 )方法,会不会也出现这个问题

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,代码完成的不错,

对于强转为int的方法,如果两数的差小于1而且大于0是会出现问题。

如果使用Float包装类中的compareTo(Float )方法就会避免该问题~因为在Float的底层如果f1和f2相等,会在进行转化为十进制的数值,再进行比较。具体如下:

http://img1.sycdn.imooc.com//climg/5d9ff59209a2927707660370.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师