숫자 데이터(byte int short long float double)는 당연히 크기가 비교 가능하고 정렬도 가능합니다. 커스텀 클래스의 종류는 많지만, 정렬 지표로 사용할 수 있는 공통 지표가 없기 때문에 이를 위해 자바에서는 두 가지 인터페이스를 제공합니다. , 비교 가능 및 비교기.
Collections.sort() 기본 정렬은 Arrays.sort()를 사용하고 Arrays.sort()는 정렬을 위해 버블 방법을 사용합니다.
크기를 비교해야 하는 객체는 Comparable 인터페이스를 구현하고 비교 방법을 설정하는 데 사용되는 추상 메서드를 구현할 수 있습니다. 다음은 설명하기 위한 예입니다.
package com.javase.collections.comparable;public class Student implements Comparable<Student> {private String name;private int score;public Student() {super(); }public Student(String name, int score) {super();this.name = name;this.score = score; }public String getName() {return name; }public void setName(String name) {this.name = name; }public int getScore() {return score; }public void setScore(int score) {this.score = score; } @Overridepublic int compareTo(Student stu) {return this.score - stu.score;// 操作对象减去参数对象,升序排列,反之降序。 } }
CompareTo() 메서드에서 속성 점수는 "this.score-stu.score"를 사용하여 정렬 표시기로 사용됩니다. , 최종 결과는 오름차순으로 정렬되고 그 반대의 경우도 내림차순으로 정렬됩니다.
package com.javase.collections.comparable;import java.util.ArrayList;import java.util.Collections;import java.util.List;import org.junit.Test;public class ComparableTest { @Testpublic void testComparable() { List<Student> stus = new ArrayList<Student>(); Student zhangsan = new Student("zhangsan", 100); Student lisi = new Student("lisi", 90); Student wanger = new Student("wanger", 95); stus.add(zhangsan); stus.add(lisi); stus.add(wanger); System.out.println("排序前");for (Student x : stus) { System.out.println(x.getName() + "::" + x.getScore()); } System.out.println("排序后"); Collections.sort(stus);for (Student x : stus) { System.out.println(x.getName() + "::" + x.getScore()); } } }
출력:
클래스가 Comparable 인터페이스를 구현하지 않는 경우 생성되었습니다. 그렇게 되길 바랍니다. 소스 코드 수정 객체를 정렬하려면 Comparator 인터페이스를 구현하고 정렬 메서드를 호출할 때 정렬 메서드를 지정할 수 있습니다. 다음은 설명을 위한 예입니다.
package com.javase.collections.comparator;public class Student {private String name;private int score;public Student() {super(); }public Student(String name, int score) {super();this.name = name;this.score = score; }public String getName() {return name; }public void setName(String name) {this.name = name; }public int getScore() {return score; }public void setScore(int score) {this.score = score; } }
package com.javase.collections.comparator;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;import org.junit.Test;public class ComparatorTest { @Testpublic void test() { List<Student> stus = new ArrayList<Student>(); Student zhangsan = new Student("zhangsan", 100); Student lisi = new Student("lisi", 90); Student wanger = new Student("wanger", 95); stus.add(zhangsan); stus.add(lisi); stus.add(wanger); System.out.println("排序前");for (Student x : stus) { System.out.println(x.getName() + "::" + x.getScore()); } System.out.println("-----------------------"); Collections.sort(stus, new Comparator<Student>() { @Overridepublic int compare(Student stu01, Student stu02) {// return stu01.getScore() - stu02.getScore();//升序return stu02.getScore() - stu01.getScore();// 降序 } }); System.out.println("排序后");for (Student x : stus) { System.out.println(x.getName() + "::" + x.getScore()); } } }
비교(Student stu01, Student stu02) 메서드에서 속성별로 정렬합니다. 점수 지표는 "stu01.score-stu02.score"를 사용하며 최종 결과는 오름차순으로 정렬되며 그 반대도 마찬가지입니다.
출력:
위 내용은 Comparable 및 Comparator의 비교 및 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!