首页 文章

如何实现Java可比接口?

提问于
浏览
90

我不确定如何在我的抽象类中实现类似的接口 . 我有以下示例代码,我正在尝试并解决它:

public class Animal{
    public String name;
    public int yearDiscovered;
    public String population;

    public Animal(String name, int yearDiscovered, String population){
        this.name = name;
        this.yearDiscovered = yearDiscovered;
        this.population = population; }

    public String toString(){
        String s = "Animal name: "+ name+"\nYear Discovered: "+yearDiscovered+"\nPopulation: "+population;
        return s;
    }
}

我有一个测试类,它将创建Animal类型的对象,但是我希望在这个类中有一个类似的接口,以便旧年的发现排名高于低 . 我不知道如何解决这个问题 .

10 回答

  • 1

    你只需要定义 Animal implements Comparable<Animal>public class Animal implements Comparable<Animal> . 然后你必须以你喜欢的方式实现 compareTo(Animal other) 方法 .

    @Override
    public int compareTo(Animal other) {
        return Integer.compare(this.year_discovered, other.year_discovered);
    }
    

    使用 compareTo 的这种实现,具有更高 year_discovered 的动物将被命令更高 . 我希望你能通过这个例子得到 ComparablecompareTo 的想法 .

  • 143

    你需要:

    • implements Comparable<Animal> 添加到类声明中;和

    • 实现 int compareTo( Animal a ) 方法以执行比较 .

    像这样:

    public class Animal implements Comparable<Animal>{
        public String name;
        public int year_discovered; 
        public String population; 
    
        public Animal(String name, int year_discovered, String population){
            this.name = name;
            this.year_discovered = year_discovered;
            this.population = population;
        }
    
        public String toString(){
         String s = "Animal name: "+ name+"\nYear Discovered: "+year_discovered+"\nPopulation: "+population;
         return s;
        }
    
        @Override
        public int compareTo( final Animal o) {
            return Integer.compare(this.year_discovered, o.year_discovered);
        }
    }
    
  • 33

    当你在其中时,我建议记住一些关于compareTo()方法的关键事实

    • CompareTo必须与equals方法一致,例如如果两个对象通过equals()相等,则compareTo()必须返回零,否则如果这些对象存储在SortedSet或SortedMap中,它们将无法正常运行 .

    • 如果当前对象与null对象进行比较,则CompareTo()必须抛出NullPointerException,而不是在这种情况下返回false的equals() .

    阅读更多:http://javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html#ixzz4B4EMGha3

  • -1

    在您的类中实现 Comparable<Animal> 接口,并在您的类中提供 int compareTo(Animal other) 方法的实现 . See This Post

  • -5

    您需要实现接口并定义compareTo()方法 . 有关一个好的教程请转到 - Tutorials point linkMyKongLink

  • 1

    需要 API Version 19Integer.compare 方法源代码的可能替代方法是:

    public int compareTo(Animal other) { return Integer.valueOf(this.year_discovered).compareTo(other.year_discovered); }

    此备选方案 does not 要求您使用 API version 19 .

  • 5

    Emp类需要实现Comaparable接口,因此我们需要覆盖其compateTo方法 .

    import java.util.ArrayList;
    import java.util.Collections;
    
    
    class Emp implements Comparable< Emp >{
    
        int empid;
        String name;
    
        Emp(int empid,String name){
             this.empid = empid;  
             this.name = name;
    
        }
    
    
        @Override
        public String toString(){
            return empid+" "+name;
        }
    
        @Override
        public int compareTo(Emp o) {
    
         if(this.empid==o.empid){
           return 0; 
         } 
         else if(this.empid < o.empid){
         return 1;
         }
         else{
           return -1;
         }
        }
    }
    

    public class JavaApplication1 {
    
    
        public static void main(String[] args) {
    
        ArrayList<Emp> a= new ArrayList<Emp>();
    
        a.add(new Emp(10,"Mahadev"));
          a.add(new Emp(50,"Ashish"));
          a.add(new Emp(40,"Amit"));
          Collections.sort(a);
          for(Emp id:a){
          System.out.println(id);
          }
        }
    
    }
    
  • 0

    这是实现java可比接口的代码,

    // adding implements comparable to class declaration
    public class Animal implements Comparable<Animal>
    {
        public String name;
        public int yearDiscovered;
        public String population;
    
        public Animal(String name, int yearDiscovered, String population)
        {
            this.name = name;
            this.yearDiscovered = yearDiscovered;
            this.population = population; 
        }
    
        public String toString()
        {
            String s = "Animal name : " + name + "\nYear Discovered : " + yearDiscovered + "\nPopulation: " + population;
            return s;
        }
    
        @Override
        public int compareTo(Animal other)  // compareTo method performs the comparisons 
        {
            return Integer.compare(this.year_discovered, other.year_discovered);
        }
    }
    
  • 0

    使用比较器......

    public class AnimalAgeComparator implements Comparator<Animal> {
    
    @Override
    public int compare(Animal a1, Animal a2) {
      ...
    }
    }
    
  • 0

    通过实现实现Comparable的公共类可以很容易地完成这件事 . 这将允许您使用compareTo方法,该方法可以与您要比较的任何其他对象一起使用 .

    例如,您可以通过这种方式实现它:

    public String compareTo(Animal oth) 
    {
        return String.compare(this.population, oth.population);
    }
    

    我想这可能会解决你的目的 .

相关问题