必須要說的java對象排序(實現Comparable接口)

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]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章