Java集合排序(看完秒懂)


比如將一個List<Student>排序,則有兩種方式:
1:Student實現Comparable接口:
2:給排序方法傳遞一個Comparator參數:

請看下面的舉例:
Student類:

package demo;

//Student實現Comparable,需要實現compareTo方法
public class Student implements Comparable<Student>{
	private String name;
	private Integer age;

	public Student(String name,Integer age) {
		// TODO Auto-generated constructor stub
		this.name=name;
		this.age=age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

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

	@Override
	public int compareTo(Student o) {
		// TODO Auto-generated method stub
		if(this.age>o.getAge()){
			return 1;
		}
		else if(this.age<o.getAge()){
			return -1;
		}
		else{
			return 0;
		}
	}
}

主類:

package demo;

import java.util.*;

public class main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<Student> list=new ArrayList<Student>();
		Student s1=new Student("T-F", 18);
		Student s2=new Student("H胡歌", 28);
		Student s3=new Student("Z周潤發", 50);
		Student s4=new Student("M梅蘭芳", 100);
		list.add(s1);
		list.add(s4);
		list.add(s3);
		list.add(s2);
		
		Iterator iterator=list.iterator();
		System.out.println("------默認排序(按年紀)-------");
		Collections.sort(list);
		while(iterator.hasNext()){
			Student s=(Student)iterator.next();
			System.out.println(s.getName()+" "+s.getAge());
		}
		
		System.out.println("------倒序排序-------");
		Comparator comparator=Collections.reverseOrder();
		Collections.sort(list,comparator);
		Iterator iterator_reverse=list.iterator();
		while(iterator_reverse.hasNext()){
			Student s=(Student)iterator_reverse.next();
			System.out.println(s.getName()+" "+s.getAge());
		}
		
		System.out.println("------根據姓名排序-------");
		Collections.sort(list,new Comparator<Student>(){
			@Override
			public int compare(Student o1, Student o2) {
				// TODO Auto-generated method stub
				return    o1.getName().compareTo(o2.getName());
			}}
		);
		Iterator iterator_name=list.iterator();
		while(iterator_name.hasNext()){
			Student s=(Student)iterator_name.next();
			System.out.println(s.getName()+" "+s.getAge());
		}
		
	}
}

執行結果:

------默認排序-------
T-F 18
H胡歌 28
Z周潤發 50
M梅蘭芳 100
------倒序排序-------
M梅蘭芳 100
Z周潤發 50
H胡歌 28
T-F 18
------根據姓名排序-------
H胡歌 28
M梅蘭芳 100
T-F 18
Z周潤發 50


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM