下面來觀察一下Arrays類提供的數(shù)組排序方法。
public static void sort(Object[] a);
對象數(shù)組排序,發(fā)現(xiàn)Arrays類里面利用sort可以實現(xiàn)對象數(shù)組排序。
范例:編寫測試代碼
package TestDemo;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
class Book{
private String title;
private double price;
public Book(String title,double price){
this.title=title;
this.price=price;
}
@Override
public String toString() {
return "BookName:"+this.title+"price:"+this.price;
}
}
public class TestDemo{
public static void main(String[] args) throws Exception{
Book books[]=new Book[]{
new Book("Java", 11.1),
new Book("JSP",22.2),
new Book("Android",33.3) };
Arrays.sort(books);
System.out.println(Arrays.toString(books));
}
}
在沒有語法錯誤的情況下 報了以下錯誤。
Exception in thread "main" java.lang.ClassCastException: TestDemo.Book 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 TestDemo.TestDemo.main(TestDemo.java:32)
造成此類異常只有一個原因,兩個沒有關(guān)系的類對象發(fā)生了強制性的轉(zhuǎn)換。
這是由于Arrays下的public static void sort(Object[] a)對象排序方法要求悼吱,所有參數(shù)必須繼承Comparable接口才能使用Arrays.sort()方法。
對象數(shù)組的比較良狈,需要具體的規(guī)則(例如按照對象實例屬性的價格排序等)后添,規(guī)則就由Comparable接口定義
public interface Comparable<T>{
public int compareTo(T t);
}
實際上String類就是Comparable接口的子類,之前使用的String的compareTo方法就是比較的操作功能⌒蕉。現(xiàn)在我們用CompareTo進行對象比較遇西,方法返回三類數(shù)據(jù):1(大于)馅精,0(等于),-1(小于)
范例:使用比較器:
package TestDemo;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
class Book implements Comparable<Book>{
private String title;
private double price;
public Book(String title,double price){
this.title=title;
this.price=price;
}
@Override
public String toString() {
return "BookName:"+this.title+"price:"+this.price;
}
@Override
public int compareTo(Book o) {//此方法 Arrays.sort()會自動調(diào)用努溃。
if(this.price>o.price){
return 1;
}else if(this.price<o.price){
return -1;
}else{
return 0;
}
}
}
public class TestDemo{
public static void main(String[] args) throws Exception{
Book books[]=new Book[]{
new Book("Java", 11.1),
new Book("JSP",22.2),
new Book("Android",33.3) };
Arrays.sort(books);
System.out.println(Arrays.toString(books));
}
}
image.png
的確實現(xiàn)了對象數(shù)組按照價格排序硫嘶。
實現(xiàn)comparable接口子類(Book類)的comparTo方法由Arrays.sort()自動調(diào)用。
總結(jié):
以后不管何種情況下梧税,只要是一組對象要排序沦疾,對象所在的類一定要實現(xiàn)Comparable接口。