能排序的类最好都实现它,可以实现自定义排序方法。
比如写个类叫屎,将来要排序的话,希望它按照营养含量排序,就需要实现这个方法,因为java本身不知道该怎么排序。
Comparable接口里只有一个方法,叫compareTo(Object obj)。
重写这个方法的时候记得先把形参obj转换成自己的类型,比如 Shit s = (Shit) obj。不然Object看不到子类的属性。
然后需要有返回值,类型int,大于零说明这个大,其他类推。
目前只发现了在排序里的用法,已经很有用了,在别处应该还有别的用法,将来自然会知道。
比如新建一个Shit类型的数组,里面初始化几个对象,然后调用一下sort()方法,就按照营养含量排序了,根据compareTo()方法的内容,还可以实现各种神经病排序方法。
放个例子:
1 import java.util.Arrays; 2 3 public class test implements Comparable<Object> { 4 int cmp; 5 public test(int i) { 6 this.cmp = i; 7 } 8 9 public int compareTo(Object o) { 10 test obj = (test) o; 11 if (obj.cmp == this.cmp) 12 return 0; 13 else 14 return obj.cmp > this.cmp ? 1 : -1; 15 } 16 17 public String toString() { 18 return Integer.toString(this.cmp); 19 } 20 21 public static void main(String[] args) { 22 test one = new test(152); 23 test two = new test(43690); 24 test tre = new test(15); 25 test fur = new test(1536); 26 27 test[] list = new test[4]; 28 list[0] = one; list[1] = two; list[2] = tre; list[3] = fur; 29 30 for (test t: list) { 31 System.out.println(t); 32 } 33 34 Arrays.sort(list); 35 System.out.println(); 36 37 for (test t: list) { 38 System.out.println(t); 39 } 40 } 41 }
=================================================================================================
添加刚学的泛型知识。
public class test implements Comparable<Object> {
}
public int compareTo(Object o) {
test obj = (test) o;
}
public int compareTo(Object o) {
test obj = (test) o;
红字部分全改成test类型,蓝字部分就不需要了。
尖括号里的内容指定了泛型,意思是我在这里只用这种类型,介于Object是所有对象的父类,现在用了跟没用一样。
如果指定test类型,那下边取出内容自然也是test类型,就不需要强制转换了。