zoukankan      html  css  js  c++  java
  • comparable和comparator的异同

    public class Domain implements Comparable<Domain>{
        private String str;
    
        public Domain(String str){
            this.str = str;
        }
    
        public int compareTo(Domain domain){
            if(this.str.compareTo(domain.str) == 0){
                return 0;
            }else if(this.str.compareTo(domain.str) > 0){
                return 1;
            }else{
                return -1;
            }
        }
    
        public static void main(String[] args) {
            Domain d1 = new Domain("a");
            Domain d2 = new Domain("b");
            Domain d3 = new Domain("c");
            System.out.println(d1.compareTo(d2));
            System.out.println(d2.compareTo(d3));
            System.out.println(d3.compareTo(d1));
        }
    }
    

    //comparable是一个内部比较器,实现comparable接口,内部实现compareTo方法,返回1代表大于,返回-1代表小于,返回0代表相等


    comparator可以视为外比较器,有两种比较可以使用外比较器

    1. 首先类没有实现comparable接口

    2. 类实现的compareTo方法不是自己想要的

    import java.util.*;
    
    public class DomainComparator implements Comparator<Domain>{
        public int compare(Domain o1,Domain o2){
            if(o1.getStr().compareTo(o2.getStr()) > 0){
                return 1;
            }
            else if(o1.getStr().compareTo(o2.getStr()) == 0){
                return 0;
            }
            else{
                return -1;
            }
        }
    
        public static void main(String[] args) {
            Domain d1 = new Domain("a");
            Domain d2 = new Domain("b");
            Domain d3 = new Domain("c");
            DomainComparator domainComparator = new DomainComparator();
            System.out.println(domainComparator.compare(d1,d2));
        }
    }
    
    class Domain{
        private String str;
    
        public Domain(String str){
            this.str = str;
        }
    
        public String getStr(){
            return str;
        }
    }
    

    //创建一个外部比较器

    两者比较:

    comparator可能耦合性比较低,如果改变比较算法,只需要更改compare方法,不需要更改类的结构,更加独立。

  • 相关阅读:
    face_recognition人脸识别框架
    POJ 3260 The Fewest Coins(多重背包问题, 找零问题, 二次DP)
    POJ 2392 Space Elevator(多重背包变形)
    POJ 1014 Dividing(多重背包, 倍增优化)
    POJ 1384 Piggy-Bank(完全背包)
    POJ 2063 Investment(完全背包)
    POJ 3211 Washing Cloths(01背包变形)
    POJ 1837 Balance(01背包变形, 枚举DP)
    POJ 2923 Relocation(01背包变形, 状态压缩DP)
    POJ 1243 One Person
  • 原文地址:https://www.cnblogs.com/zhangchiblog/p/8604946.html
Copyright © 2011-2022 走看看