Comparable
package java.lang;
public interface Comparable<T>{
// negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
public int compareTo(T o);
}
要比较的类 implements Comparable 重写compareTo() 方法
public class T21 {
public static void main(String[] args) {
Pig[] pigs=new Pig[]{
new Pig("xixi", 2),
new Pig("cici", 3),
new Pig("sisi", 1),
};
Arrays.sort(pigs);
for(Pig pig:pigs)
{
System.out.println(pig.getName()+" " +pig.getAge());
}
}
}
class Pig {
private String name;
private int age;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public Pig(String name, int age) {
this.name = name;
this.age = age;
}
}
Exception in thread "main" java.lang.ClassCastException: com.ms.Pig cannot be cast to java.lang.Comparable
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:320)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:188)
at java.util.Arrays.sort(Arrays.java:1246)
at com.ms.T21.main(T21.java:12)
public class T21 {
public static void main(String[] args) {
Pig[] pigs=new Pig[]{
new Pig("xixi", 2),
new Pig("cici", 3),
new Pig("sisi", 1),
};
Arrays.sort(pigs);
for(Pig pig:pigs)
{
System.out.println(pig.getName()+" " +pig.getAge());
}
}
}
class Pig implements Comparable<Pig>{
private String name;
private int age;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public Pig(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Pig o) {
return age-o.age;
}
}
sisi 1
xixi 2
cici 3
Comparator
package java.util;
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
...
}
构造一个外部比较器 外部比较器实现Comparator并重写 compare()方法
public class T21 {
public static void main(String[] args) {
Pig[] pigs=new Pig[]{
new Pig("xixi", 2),
new Pig("cici", 3),
new Pig("sisi", 1),
};
Arrays.sort(pigs,new PigComparator());
for(Pig pig:pigs)
{
System.out.println(pig.getName()+" " +pig.getAge());
}
}
}
class PigComparator implements Comparator<Pig>{
@Override
public int compare(Pig o1, Pig o2) {
return o1.getAge()-o2.getAge();
}
}
class Pig {
private String name;
private int age;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public Pig(String name, int age) {
this.name = name;
this.age = age;
}
}
sisi 1
xixi 2
cici 3
Integer实现了Comparable
public class T21 {
public static void main(String[] args) {
Integer i=10;
Integer i2=15;
System.out.println(i.compareTo(i2));
}
}
public final class Integer extends Number implements Comparable<Integer>{
public int compareTo(Integer anotherInteger) {
return compare(this.value, anotherInteger.value);
}
public static int compare(int x, int y) {
return (x < y) ? -1 : ((x == y) ? 0 : 1);
}
}