如何实现Java可比接口?

时间:2014-02-07 11:22:14

标签: java comparable

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

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 个答案:

答案 0 :(得分:144)

您只需定义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

答案 1 :(得分:34)

你需要:

  • 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);
    }
}

答案 2 :(得分:5)

当你参与其中时,我建议记住一些关于compareTo()方法的重要事实

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

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

  3. 了解详情:http://javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html#ixzz4B4EMGha3

答案 3 :(得分:1)

在您的班级中实施Comparable<Animal>界面,并在您的班级中提供int compareTo(Animal other)方法的实施。See This Post

答案 4 :(得分:1)

您需要实现接口并定义compareTo()方法。 如需一个好的教程,请转到 - Tutorials point link 要么 MyKongLink

答案 5 :(得分:0)

需要Integer.compare的{​​{1}}方法源代码的可能替代方法是:

API Version 19

此替代 要求您使用public int compareTo(Animal other) { return Integer.valueOf(this.year_discovered).compareTo(other.year_discovered); }

答案 6 :(得分:0)

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);
      }
    }

}

答案 7 :(得分: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);
    }
}

答案 8 :(得分:-1)

使用比较器......

    public class AnimalAgeComparator implements Comparator<Animal> {

@Override
public int compare(Animal a1, Animal a2) {
  ...
}
}

答案 9 :(得分:-5)

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

例如,你可以用这种方式实现它:

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

我认为这可能会解决你的目的。