實現集合List中的元素進行排序

 

Collections對List集合中的數據進行排序

有時候需要對集合中的元素按照一定的規則進行排序,這就需要用到

 

Java中提供的對集合進行操作的工具類Collections,其中的sort方法

 

先看一個簡單的例子:

 

public static void main(String[] args) {
	List<Integer> nums = new ArrayList<Integer>();
		nums.add(3);
		nums.add(5);
		nums.add(1);
		nums.add(0);
		System.out.println(nums);
		Collections.sort(nums);
		System.out.println(nums);
}

輸出結果:
[3, 5, 1, 0]
[0, 1, 3, 5]

 

稍微複雜的List裏面放一個複雜的對象

 

package core.java.collection.collections;

public class User implements Comparable<User>{
	
	private int score;
	
	private int age;
	
	public User(int score, int age){
		super();
		this.score = score;
		this.age = age;
	}

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public int compareTo(User o) {
		int i = this.getAge() - o.getAge();//先按照年齡排序
		if(i == 0){
			return this.score - o.getScore();//如果年齡相等了再用分數進行排序
		}
		return i;
	}
	
}

public static void main(String[] args) {
		List<User> users = new ArrayList<User>();
		users.add(new User(78, 26));
		users.add(new User(67, 23));
		users.add(new User(34, 56));
		users.add(new User(55, 23));
		Collections.sort(users);
		for(User user : users){
			System.out.println(user.getScore() + "," + user.getAge());
		}
}

輸出結果:
55,23
67,23
78,26
34,56
我們會發現sort(List<T>)方法中List中的T必須實現Comparable<T>接口,然後實現
compareTo()方法,該方法的返回值0代表相等,1表示大於,-1表示小於;爲什麼
在簡單例子中沒有看到實現Comparable接口呢?是因爲Integer類其實自己已經實現
了Comparable接口,Java已經給我們做好了。

Collections提供的第二種排序方法sort(List<T> list, Comparator<? super T> c)
先看例子:

package core.java.collection.collections;

public class Students {
	
	private int age;
	private int score;
	
	public Students(int age, int score){
		super();
		this.age = age;
		this.score = score;
	}
	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
}
public static void main(String[] args) {
		List<Students> students = new ArrayList<Students>();
		students.add(new Students(23, 100));
		students.add(new Students(27, 98));
		students.add(new Students(29, 99));
		students.add(new Students(29, 98));
		students.add(new Students(22, 89));
		Collections.sort(students, new Comparator<Students>() {

			@Override
			public int compare(Students o1, Students o2) {
				int i = o1.getScore() - o2.getScore();
				if(i == 0){
					return o1.getAge() - o2.getAge();
				}
				return i;
			}
		});
		for(Students stu : students){
			System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());
		}
}

輸出結果:
score:89:age22
score:98:age27
score:98:age29
score:99:age29
score:100:age23

從上面的例子我們可以看出Students類沒有實現Comparable<T>接口,只是在sort()方法
中多傳入一個參數,只不過該參數是一個接口我們需要實現其compare方法。

以上就是是Java中Colelctions工具類爲我們提供的兩種集合排序方法。

 

 

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