> Java > java지도 시간 > Comparable 및 Comparator의 비교 및 ​​사용

Comparable 및 Comparator의 비교 및 ​​사용

零下一度
풀어 주다: 2017-07-24 10:19:14
원래의
1342명이 탐색했습니다.

개요

1. Comparable 및 Comparator 사용 배경

숫자 데이터(byte int short long float double)는 당연히 크기가 비교 가능하고 정렬도 가능합니다. 커스텀 클래스의 종류는 많지만, 정렬 지표로 사용할 수 있는 공통 지표가 없기 때문에 이를 위해 자바에서는 두 가지 인터페이스를 제공합니다. , 비교 가능 및 비교기.

2. 컬렉션 정렬

Collections.sort() 기본 정렬은 Arrays.sort()를 사용하고 Arrays.sort()는 정렬을 위해 버블 방법을 사용합니다.

2 Comparable

크기를 비교해야 하는 객체는 Comparable 인터페이스를 구현하고 비교 방법을 설정하는 데 사용되는 추상 메서드를 구현할 수 있습니다. 다음은 설명하기 위한 예입니다.

1. 엔터티 클래스

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"를 사용하여 정렬 표시기로 사용됩니다. , 최종 결과는 오름차순으로 정렬되고 그 반대의 경우도 내림차순으로 정렬됩니다.

2. 테스트 클래스

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());
        }
    }

}
로그인 후 복사

출력:

Three Comparator

클래스가 Comparable 인터페이스를 구현하지 않는 경우 생성되었습니다. 그렇게 되길 바랍니다. 소스 코드 수정 객체를 정렬하려면 Comparator 인터페이스를 구현하고 정렬 메서드를 호출할 때 정렬 메서드를 지정할 수 있습니다. 다음은 설명을 위한 예입니다.

1. 엔터티 클래스

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;
    }

}
로그인 후 복사

2. 테스트 클래스

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿