Comparable vs Comparator

  • Comparable interface can be used to provide single way of sorting whereas Comparator interface is used to provide different ways of sorting.
  • For using Comparable, Class needs to implement it whereas for using Comparator we don’t need to make any change in the class.
  • Comparable interface is in java.lang package whereas Comparator interface is present in java.utilpackage.
  • We don’t need to make any code changes at client side for using Comparable, Arrays.sort() or Collection.sort() methods automatically uses the compareTo() method of the class. For Comparator, client needs to provide the Comparator class to use in compare() method.

 

public class Employee implements Comparable<Employee> {

    private Long id;

    private String name;

    private Double salary;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Double getSalary() {
        return salary;
    }

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

    public Employee() {
    }

    public Employee(Long id, String name, Double salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }

    @Override
    public int compareTo(Employee o) {
        return (int) (this.id - o.id);
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this)
                .append("id", id)
                .append("name", name)
                .append("salary", salary)
                .toString();
    }
}
public static void main(String[] args) {

        List<Employee> employeeList = new ArrayList<>();
        employeeList.add(new Employee(13L, "hello", 8000D));
        employeeList.add(new Employee(17L, "world", 10000D));
        employeeList.add(new Employee(13L, "test", 12000d));
        employeeList.add(new Employee(14L, "demo", 15000D));

        Collections.sort(employeeList);

        for (Employee e : employeeList) {

            System.out.println(e);
        }

        Collections.sort(employeeList, new Comparator<Employee>() {
            @Override
            public int compare(Employee o1, Employee o2) {
                int flag = (int) (o1.getId() - o2.getId());
                if (flag == 0) {
                    flag = (int) (o2.getSalary() - o1.getSalary());
                }

                return flag;
            }
        });

        System.out.println("comparator sort:");

        for (Employee e : employeeList) {

            System.out.println(e);
        }


    }
Employee@4d76f3f8[id=13,name=hello,salary=8000.0]
Employee@2d8e6db6[id=13,name=test,salary=12000.0]
Employee@23ab930d[id=14,name=demo,salary=15000.0]
Employee@4534b60d[id=17,name=world,salary=10000.0]
comparator sort:
Employee@2d8e6db6[id=13,name=test,salary=12000.0]
Employee@4d76f3f8[id=13,name=hello,salary=8000.0]
Employee@23ab930d[id=14,name=demo,salary=15000.0]
Employee@4534b60d[id=17,name=world,salary=10000.0]

 

转载于:https://www.cnblogs.com/parkdifferent/p/9796865.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值