
在java中有提供java.util.Arrays类 *** 作数组类型,并封装好了
static void sort(数据类型[] a)方法。
以下图为例:
//使用Array实现对象数组排序
public class ArraysDemo {
public static void main(String[] args) {
int[] temp = new int[]{17, 28, 57425, 5, 4, 28, 4};
Arrays.sort(temp);//对int型数组进行排序
System.out.println(Arrays.toString(temp));//输出int型数组排序后的结果
String[] tempStr = new String[]{"17", "28", "adfa", "cc", "af", "28adf", "4"};
Arrays.sort(tempStr);//对String型数组进行排序
System.out.println(Arrays.toString(tempStr));//输出String型数组排序后的结果
}
}
此为上述代码执行结果:
[4, 4, 5, 17, 28, 28, 57425]
[17, 28, 28adf, 4, adfa, af, cc]
此方法如果正常传入 String 和引用类型数据时。是可以正常执行。
下面我们创建一个Book类对象做对象数据测试:
class Book {
private String title;
private double price;
public Book(String title, double price) {
this.title = title;
this.price = price;
}
public void setTitle(String title) {
this.title = title;
}
public void setPrice(double price) {
this.price = price;
}
public String getTitle() {
return title;
}
public double getPrice() {
return price;
}
@Override
public String toString() {
return "Book{" +
"title='" + title + ''' +
", price=" + price +
'}' + "n";
}
}
编写测试用例
public class ArraysDemo {
public static void main(String[] args) {
Book book []=new Book[]{
new Book("Java开发",123.12),
new Book("C#开发",12.12),
new Book("Jsp开发",23.12),
new Book("Js发",523.12)
};//创建Book对象数组;
Arrays.sort(book);//对象数组排序
System.out.println(Arrays.toString(book));
}
}
需要注意的是,以上代码无编译错误,但在运行后却出现了下列异常信息。
Exception in thread "main" java.lang.ClassCastException: cn.test.demo.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 cn.test.demo.ArraysDemo.main(ArraysDemo.java:49)
这种情况其实在java API文档中也提到过,对象数组要实现排序的话,对象所在的类一定要实现Comparable接口,覆写其中的compareTo()方法进行排序 *** 作。
懂得问题产生的原因后的完整代码如下:
package cn.test.demo; import java.util.Arrays; //Book对象数组如果要进行排序 必须要实现Comparable接口,覆写compareTo方法,泛型类型接收本类对象 class Book implements Comparable{ private String title; private double price; public Book(String title, double price) { this.title = title; this.price = price; } public void setTitle(String title) { this.title = title; } public void setPrice(double price) { this.price = price; } public String getTitle() { return title; } public double getPrice() { return price; } @Override public String toString() { return "Book{" + "title='" + title + ''' + ", price=" + price + '}' + "n"; } //覆写Conparable接口的方法,定义在Book对象中要以哪个属性进行排序 @Override public int compareTo(Book o) { if (this.price > o.price) { return -1; } else if (this.price < o.price) { return 1; } else { return 0; } } } //使用Array实现对象数组排序 public class ArraysDemo { public static void main(String[] args) { Book book[] = new Book[]{ new Book("Java开发", 123.12), new Book("C#开发", 12.12), new Book("Jsp开发", 23.12), new Book("Js发", 523.12) };//创建Book对象数组; Arrays.sort(book);//对象数组排序 System.out.println(Arrays.toString(book)); } }
程序运行结果:
[Book{title='Js发', price=523.12}
, Book{title='Java开发', price=123.12}
, Book{title='Jsp开发', price=23.12}
, Book{title='C#开发', price=12.12}
]
日常记录自学的内容,大神勿喷!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)