关于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 星