Videos
I'm struggling to understand why we need to use compareTo for comparing things when I can just create a method that does the same thing. What I understand so far is that Interfaces can hold abstract methods without implementation, and once you implement that interface on a class you have to override the method from the interface and write the implementation. What I don't understand is what is significant about (implements Comparable<T>) if all I'm gonna do is override compareTo method so it returns 1 if larger, -1 if smaller or 0 if equal.
You just have to define that Animal implements Comparable<Animal> i.e. public class Animal implements Comparable<Animal>. And then you have to implement the compareTo(Animal other) method that way you like it.
@Override
public int compareTo(Animal other) {
return Integer.compare(this.year_discovered, other.year_discovered);
}
Using this implementation of compareTo, animals with a higher year_discovered will get ordered higher. I hope you get the idea of Comparable and compareTo with this example.
You need to:
- Add
implements Comparable<Animal>to the class declaration; and - Implement a
int compareTo( Animal a )method to perform the comparisons.
Like this:
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);
}
}