자바 에서 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 의 사용자 정의 대상 과 비교 하 는 방법 과 같 습 니 다.여 기 는 더 이상 군말 하지 않 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【eclipse】같은 파일을 2개 열고 싶다【에디터의 분할】「이런 것은 다른 클래스로 나누어야 한다!」라든지 있다고는 생각합니다만. 실제로 실무 속에서 프로그램을 쓰고 있으면, 이런 소스에 눈에 걸리는 일도 적지 않을까···. 그건 그렇고, 내 노트북에서 이렇게 보입니다 네...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.