자바 에서 TreeSet 또는 TreeMap 은 사용자 정의 대상 의 정렬 을 실현 합 니 다.

자바 에서 TreeSet 또는 TreeMap 은 사용자 정의 대상 의 정렬 을 실현 합 니 다.
TreeSet 과 TreeMap 의 아래쪽 은 모두 이 진 트 리 를 데이터 구조 로 하고 TreeSet 은 인용 형식의 데이터 나 TreeMap 을 인용 형식 으로 키 로 저장 할 때 정렬 해 야 할 대상 이 있 는 클래스 를 Comparable 인터페이스 로 만들어 야 합 니 다.
또는 이 두 개의 집합 을 구성 할 때 비교 기 를 가 진 구조 방법 을 사용한다.
//	     ,  Comparable  
//	   compareTo  ,           
class Student  implements Comparable<Student> {
     
	int id;//	  id
	String name;//	    
	int cScore;//	    
	int mScore;//	    
	int eScore;//	    
	//	    
	public Student(int id, String name, int cScore, int mScore, int eScore) {
     
		this.id = id;
		this.name = name;
		this.cScore = cScore;
		this.mScore = mScore;
		this.eScore = eScore;
	}
	@Override 
	//	            ,     ,  id      
	public int compareTo(Student o) {
     
		int s1 = this.cScore + this.mScore + this.eScore;
		int s2 = o.cScore + o.mScore + o.eScore;
		return s1 == s2 ? (this.id - o.id) : (s2 - s1);
	}
}
public class StudentDemo {
     

	public static void main(String[] args) {
     
		//	  1,                 
		TreeSet<Student> ts1 = new TreeSet<>();//	          
		ts1.add(100, "  ", 78, 90, 80);
		ts1.add(104, "  ", 100, 100, 90);
		ts1.add(105, "  ", 100, 100, 90);
		//	  2,       TreeSet
		//	new    ,         ,   new     Comparator     ,                 。
		TreeSet<Student> ts2 = new TreeSet<Student>(new Comparator<Student>() {
     
			public int compare(Student p1, Student p2) {
     
				int s1 = p1.cScore + p1.mScore + p1.eScore;
				int s2 = p2.cScore + p2.mScore + p2.eScore;
				return s1 == s2 ? (p1.id - p2.id) : (s2 - s1);
			}
		});
	    //	           ,  java8   Lambda   ,            
		TreeSet<Student> ts3 = new TreeSet<>((o1,o2) -> {
     
			int s1 = o1.cScore + o1.mScore + o1.eScore;
			int s2 = o2.cScore + o2.mScore + o2.eScore;
			return s1 == s2 ? (o1.id - o2.id) : (s2 - s1);
		});
		

HashMap 의 사용 은 HashSet 의 사용자 정의 대상 과 비교 하 는 방법 과 같 습 니 다.여 기 는 더 이상 군말 하지 않 습 니 다.

좋은 웹페이지 즐겨찾기