如何实现Java可比较的接口?

我不知道如何在我的抽象类中实现一个可比较的接口。 我有我正在使用的以下示例代码试图让我的头:

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

我有一个testing类,将创buildtypes为动物的对象,但是我想在这个类中有一个可比较的接口,以便发现更高的年份比低。 我不知道如何去做这个。

你只需要定义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动物将被sorting更高。 我希望你compareTo这个例子得到ComparablecompareTo的想法。

你需要:

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

当你在里面时,我build议记住关于compareTo()方法的一些关键事实

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

  2. CompareTo()必须抛出NullPointerException如果当前对象得到比较为null对象,而不是equals()这种情况下返回false。

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

在你的类中实现Comparable<Animal>接口,并在你的类中提供int compareTo(Animal other)方法的实现。 看这个post

您将需要实现接口并定义compareTo()方法。 对于一个好的教程去 – 教程点链接或MyKongLink

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

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

此替代方法要求您使用API version 19

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

使用比较器…

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

这个事情可以通过实现一个实现Comparable的公共类来轻松完成。 这将允许您使用compareTo方法,该方法可以与您希望比较的任何其他对象一起使用。

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

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

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