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]