Comparable 인터페이스를 TreeSet과 결합하여 객체 자동 정렬

1852 단어

이런 상황을 겪으면서 어떤 대상의 수조나 체인 테이블에 대해 일정한 규칙에 따라 정렬을 해야 한다면 우리는 어떻게 해야 합니까?
이러한 요구 사항은 다음과 같습니다.
1. 수요1은 학생 대상에 대해 나이에 따라 순서를 정하고 나이가 어린 사람은 앞에 배열한다.
이런 수요만 보면 실현은 비교적 간단하다. 스스로 함수를 써서 빠른 정렬이나 흙이 섞인 거품 정렬을 실현하고 나이에 따라 정렬하면 된다.다음 요구 사항을 살펴보겠습니다.
2. 수요2
학생 대상에 대해서는 연령에 따라 순서를 정하면 어린 사람이 앞서고, 나이가 같은 사람이 앞서고, 키가 작은 사람이 앞선다.
3. 수요3
학생 대상에 대해 나이에 따라 순서를 정하고 나이가 어린 사람이 앞선다.나이가 같고 키가 작은 사람이 앞에 섰다.키가 비슷하고 몸무게가 가벼운 것이 앞선다.
...
이러한 수요는 페이지의 복잡화에 따라 점점 복잡해질 수 있다. 만약에 스스로 하려고 한다면 여러 겹으로 끼워 넣고 논리가 매우 복잡할 것이다. 그러면 기존의 비교적 간단한 메커니즘이 있는가.
정답은 Comparable 인터페이스를 실현하는 것입니다.
구체적인 예는 다음과 같습니다.
public class Student implements Comparable{
	private int age;
	
	public Student(int age)
	{
		this.age = age;
	}
	@Override
	public int compareTo(Object obj) {
		Student stu = (Student)obj;
		if(this.age>stu.age)
			return 1;
		else if(this.age

호출 코드:
	public static void main(String[] args) {
		TreeSet treeSet = new TreeSet();
		treeSet.add(new Student(1));
		treeSet.add(new Student(3));
		treeSet.add(new Student(2));
		for(Student student:treeSet)
		{
			System.out.println(student.getAge());
		}
	}

결과 출력:
1
2
3
이를 통해 알 수 있듯이 자동으로 나이순으로 정렬됩니다. 코드를 다시 수정하여 학생들이 나이순으로 정렬하도록 하겠습니다.
	public int compareTo(Object obj) {
		Student stu = (Student)obj;
		if(this.age>stu.age)
			return -1;
		else if(this.age

결과 출력:
3
2
1
이를 통해 알 수 있듯이 대상을 통해Comparable 인터페이스를 실현하고TreeSet의 방식과 결합하여 대상을 정렬하는 것은 매우 편리하며 논리가 비교적 간단하기 때문에 나중에 변경이 있으면compareTo 방법을 직접 수정하면 된다.
전재 대상:https://www.cnblogs.com/jerry1999/p/4175933.html

좋은 웹페이지 즐겨찾기