如何实现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
这个例子得到Comparable
和compareTo
的想法。
你需要:
- 将类
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()方法的一些关键事实
-
CompareTo必须与equals方法一致,例如,如果两个对象通过equals()相等,那么compareTo()必须返回零,否则如果这些对象存储在SortedSet或SortedMap中,它们将不能正确运行。
-
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 19
的Integer.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); }
我认为这可能会解决你的目的。