Java基础_接口Comparator比较器

Comparator接口:

在java.util包下面,排序是Comparator需要实现的功能之一,该接口代表的是是一个比较器,比较器具有可比性,可以做排序的,本质其实比较两个对象谁排在前边谁排在后边。

    public int compare(Object o1,Object o2):比较两个参数的的顺序
    两个对象比较的结果有三种:大于,等于,小于
    如果要按照升序排序:则o1小于o2返回(负数),相等返回0,o1大于o2返回(正数)
    如果要按照降序排序:则o1小于o2返回(正数),相等返回0,o1大于o2返回(负数)
    简化操作:
            升序排序: o1-o2
                 降序排序: o2-o1

public static void main(String[] args) {
    //public static <T> void sort(List<T> list)     
    ArrayList<String> list = new ArrayList<>();
    list.add("abc");
    list.add("cba");
    list.add("bca");
    list.add("sba");
    list.add("nba");
    // 排序规则,按照字符串的第一个字母降序排序
    // 使用接口中的方法:
    // public static <T> void sort(List<T> list,Comparator<? super T> c)  
    // public int compare(Object o1,Object o2):比较两个参数的的顺序
    Collections.sort(list,new Comparator(){
        @Override
        public int compare(String o1,Strng o2) {
            /*if(o2.charAt(0) - o1.charAt(0) > 0){
                return 1;
            } else if ( o2.charAt(0) - o1.charAt(0) == 0){
                return 0;
            } else {
                return -1;
            }*/
            return o2.charAt(0) - o1.charAt(0);
        }
    });
    System.out.println(list);
}
// 控制台结果:
[sba,nba,cba,bca,abc]

Comparable:强行对实现它的每个类对象进行整体排序。这种排序我们一般把它称之为自然排序,类的compareTo方法被称之为它的自然比较方法。只能在类中实现compareTo方法一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort()(和Arrays.sort())进行自动排序,对象可以用作有序映射中的键或者有序集合中的元素,无需指定比较器。

Comparator:强行对某个对象进行整体排序。可以将Comparator传递给sort()方法(如Collections.sort()后者Arrays.sort()),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(有序的set或者是有序的映射)的顺序,或者为那些没有自然顺序的对象Collection提供排序。

原文地址:https://www.cnblogs.com/9080dlb/p/14123254.html