java针对数组提供了一个Arrays.sort(Object[] a)的排序方法,针对List接口提供了Collections.sort(List<T> list)的排序方法。
TreeSet<E>类本身也是支持自然排序。
但是以上方法或类,针对基本数据类型或String还挺凑效,一旦针对自定义的类(引用数据类型),就会报错,那是因为少了下面这一步。
Exception in thread "main" java.lang.ClassCastException: xxx cannot be cast to java.lang.Comparable
说的就是某某类必须要转型为java.lang.Comparable。根据多态,也就是说目标类必须是Comparable的子类或实现类才行(这里的Comparable是接口,那么就只能实现了)。
自定义类:
//实现Comparable接口
public class User implements Comparable<User> {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User() {
super();
}
public User(int id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
//按照id排序
@Override
public int compareTo(User user) {
//return this.id > user.getId() ? 1 : (this.id == user.getId() ? 0 : -1);
if(this.id > user.getId()) {
return 1;
}else if(this.id == user.getId()) {
return 0 ;
}else {
return -1;
}
}
}
测试类:
public class Test {
public static void main(String[] args) {
User u1 = new User(1, "zhangsan");
User u2 = new User(2, "lisi");
User u3 = new User(3, "wangwu");
User [] users = {u3, u2, u1};
Arrays.sort(users);
for(User u : users) {
System.out.println(u.toString());
}
System.out.println("==================================================");
Set<User> set = new TreeSet<>();
set.add(u2);
set.add(u3);
set.add(u1);
for(User u : set) {
System.out.println(u.toString());
}
System.out.println("==================================================");
List<User> list = new ArrayList<User>();
list.add(u2);
list.add(u3);
list.add(u1);
Collections.sort(list);
for(User u : list) {
System.out.println(u.toString());
}
}
}
运行结果:
User [id=1, name=zhangsan]
User [id=2, name=lisi]
User [id=3, name=wangwu]
==================================================
User [id=1, name=zhangsan]
User [id=2, name=lisi]
User [id=3, name=wangwu]
==================================================
User [id=1, name=zhangsan]
User [id=2, name=lisi]
User [id=3, name=wangwu]