Comparable和Comparator比较

    总起:①Comparable和Comparator接口都是用来比较大小的。

               ② 从小到大:当前的(从第二个数开始)依次减去链表头结点的值直到当前的前一个为止
                   从大到小:链表头结点的值直到当前的前一个依次减到当前的(从第二个数开始)为止。
                                              (this)
                   return 返回负数,交换
                             返回正数,不交换
                             返回0,相等,不交换

一、Comparable接口介绍

     1、定义:

                     package java.lang;

                    import java.util.*;

                    public interface Comparable<T> {

                              public int compareTo(T o);

                    }

    2、通过Comparable接口实现整体排序的步骤:

                 (1)需要排序对象的类先实现Comparable接口。

                 (2)实现Comparable接口中的compareTo()方法。

            注意:可以使用Collection.sort()方法给List列表排序,Arrays.sort()给数组排序。

例:            

public class Book implements Comparable<Book>{

    private String name;
    private int price;


    public Book(String name, int price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

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

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    /**
     * 从小到大:当前的(从第二个数开始)依次减去链表头结点的值直到当前的前一个为止
     * 从大到小:、链表头结点的值直到当前的前一个依次减到当前的(从第二个数开始)为止。、
     *                                           (this)
     * return 返回负数,交换
     *              返回正数,不交换
     *        返回0,相等,不交换
     */
    @Override
    public int compareTo(Book o) {
        //从大到小
        //int i=-this.price+o.price;
        //从小到大
        int i=this.price-o.price;
        System.out.println("price "+this.price+"  "+i);
        return i;
    }

    @Override
    public String toString() {
        return "Book [name=" + name + ", price=" + price + "]";
    }
}

 

二、Comparator接口介绍-------需排序类无法修改,使用Comparator接口(策略模式)

     1、定义:

          package java.util;

         public interface Comparator<T> {

                  int compare(T o1, T o2);

                  boolean equals(Object obj);

         }

     2、public static <T> void sort(List<T> list, Comparator<? super T> c)采用内部类的实现方式,重写compare()方法,该方式使用了策略模式,对排序的算法进行抽取抽取成一个排序算法类,然后委托给Collections类---调用--->List类的sort()方法-----调用---->Arrays类中的sort()方法进行处理

     3、例子:        

public class SortTest {
    public static void main(String[]args) {
        Book book1=new Book("你好啊",12);
        Book book2=new Book("我好啊",13);
        Book book3=new Book("他好啊",10);
        Book book4=new Book("它好啊",100);

        ArrayList<Book>list=new ArrayList<>();
        list.add(book1);
        list.add(book2);
        list.add(book3);
        list.add(book4);
        //Collections.sort(list);
        Collections.sort(list, new Comparator<Book>() {

            @Override
            public int compare(Book o1, Book o2) {
                if(o1==null||o2==null) {
                    return 0;
                }else {
                    //从小到大
                    return o1.getPrice()-o2.getPrice();
                }
            }

        });
        System.out.println(list);
    }
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值