JavaRush /Java Blog /Random-KO /CompareTo 메서드

CompareTo 메서드

Random-KO 그룹에 게시되었습니다
배열이나 컬렉션에 저장된 동일한 유형의 개체를 구성하기 위해 Java 개발자는 Comparable. 단 하나의 메소드만 선언합니다 compareTo.
public interface Comparable<T> {
    public int compareTo(T o);
}
CompareTo 메서드 - 1인터페이스는 Comparable메소드에 대한 매개변수로 받아들이는 객체의 유형에 따라 매개변수화됩니다 compareTo. 이 경우 우리는 어떤 유형의 객체를 비교할 것인지 컴파일러에 경고합니다. 유형 식별 조건이 충족되지 않으면 오류가 발생합니다 ClassCastException. Java의 메소드는 compareTo호출 객체를 매개변수로 전달된 객체와 비교하고 비교 결과로 정수를 반환합니다.
  • 호출 개체가 매개 변수로 전달된 개체보다 크면 긍정적입니다.
  • 호출 개체가 매개 변수로 전달된 개체보다 작으면 음수이고, 그렇지 않으면 음수입니다.
  • 개체가 동일한 경우 null입니다.
객체 비교 논리 작성은 클래스 개발자의 유일한 관심사이며 원하는 정렬 결과에 따라 결정됩니다.

Java에서 CompareTo 메소드가 필요한 이유는 무엇입니까?

Java 프로그래머는 객체 배열과 목록을 처리해야 하는 경우가 많습니다. 많은 양의 데이터를 작업할 때는 정리된 형태로 저장하는 것이 편리한 경우가 많습니다. 첫째, 필요한 정보를 검색할 때 컬렉션 작업 속도가 빨라지고, 둘째, 정리된 데이터가 시각적으로 더 잘 인식됩니다.
CompareTo 메서드 - 2
객체 배열을 정렬하는 가장 간단하고 효과적인 방법 중 하나는 sort()클래스 메소드이며 Arrays, 목록 형태의 객체 컬렉션은 유사한 클래스 메소드입니다 Collections. 이러한 방법을 사용하여 정렬하기 위해 Java 개발자는 정렬 기준을 지정하는 방법( Comparable정렬하려는 객체 클래스에 인터페이스를 구현하거나 Comparator. 첫 번째 경우 정렬 방법은 배열 또는 목록 형식의 개체 집합을 허용합니다.
sort(T[]array)//sorting массива
sort(List<T> list)// sorting списка
두 번째에는 인터페이스의 또 다른 구현이 포함됩니다 Comparator.
sort(T[]array, Comparator <? super T> comparator)//sorting массива
sort(List<T> list, Comparator <? super T> comparator)// sorting списка
이 인터페이스는 Comparable정렬할 때 객체의 자연스러운(우리 관점에서 볼 때 가장 논리적인) 순서를 설정하려고 할 때 사용됩니다. 이는 또한 설계 단계에서 이 클래스의 객체를 비교하기 위한 알고리즘을 "하드와이어"하는 방법이기도 합니다. 예를 들어, 이 인터페이스의 구현을 사용하면 기본 기본 유형의 래퍼 클래스에서 자연 순서 기준이 정의됩니다: , Byte, Character, Long, Integer, Short, Double, Float, Boolean. 이는 또한 이러한 클래스 에 필요한 경우 프로그램에서 사용할 수 있는 String구현된 메서드가 있음을 의미합니다 . 이 메서드가 클래스에서 어떻게 구현되는지 알아보기 위해 문자열 비교의compareTo 예를 살펴보겠습니다 . String
String str1="Аарон";
        String str2="АAPOH";
        String str3="аарон";
        String str4="ААрон";
        String str5="аАрон";
        String str6="Берта";
        String str7="берта";
String[] allStr=new String[]{str1,str2,str3,str4, str5,str6, str7};
        Arrays.sort(allStr);
        for (String s:allStr){
            System.out.println(s);
        }
    }
메소드에서 이 코드를 실행하면 main다음과 같은 결과를 얻게 됩니다.
АAPOH
ААрон
Аарон
Берта
аАрон
аарон
берта
클래스의 예제에서 볼 수 있듯이 String이 메서드는 compareTo문자열을 알파벳순, 사전순, 대소문자를 구분하여 정렬합니다. 클래스 개발자가 String자연스럽게 정의한 문자열 비교 순서입니다. 사전 편찬 순서가 무엇인지 더 쉽게 이해하려면 언어 사전에서 단어가 어떻게 배열되어 있는지 기억하는 것으로 충분합니다. 숫자를 비교할 때 개체는 오름차순으로 정렬됩니다. 이 비교 논리는 클래스 Byte, Character, Long, Integer, Shor, Double, 에 내장되어 있습니다 Float.

우리 수업에서 비교를 구현해 봅시다

개체를 클래스와 비교하는 기능을 구축할 수 있는 방법의 예를 살펴보겠습니다. Java 메소드를 구현할 때 compareto객체 정렬을 위한 하나 이상의 기준을 지정할 수 있으며 및 클래스 compareto의 메소드를 사용할 수도 있습니다 . 예를 들어, 클래스 객체의 경우 이름별로 정렬을 설정하고 이름이 같은 경우에는 나이별로 정렬하도록 설정합니다. 개체는 (값이 증가함에 따라) 자연스러운 순서로 배열됩니다. 수업 : StringIntegerUserUser
public class User  implements Comparable <User>{//добавляем возможность сравнивать an objectы User

    private String name;
    private Integer age;
    private String email;

    public User(String name, int age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }

    @Override
//реализуем метод compareTo интерфейса Comparable
    public int compareTo(User o) {

//используем метод compareTo из класса String для сравнения имен
        int result = this.name.compareTo(o.name);

//если имена одинаковые -  сравниваем возраст,
используя метод compareTo из класса Integer

        if (result == 0) {
            result = this.age.compareTo(o.age);
        }
        return result;
    }

    @Override
    public String toString() {
        return "{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", email='" + email + '\'' +
                '}';
    }
클래스 메소드를 사용하여 compareTo클래스에 구현된 메소드의 작동을 테스트해 보겠습니다 . UsersortCollections
public static void main(String[] args) {
    User user = new User("Andrey", 19, "andryha@mail.ru");
    User user2 = new User("Олег", 25, "oleg@mail.ru");
    User user3 = new User("Andrey", 24,"opr@google.com");
    User user4 = new User("Igor", 16, "igor@mail.ru");
    User user5 = new User("Andrey", 44,"stary@google.com");
    List<User> list = new ArrayList<>();

    list.add(user);
    list.add(user2);
    list.add(user3);
    list.add(user4);
    list.add(user5);

    System.out.println("-------до сортировки--------");
    for (User u : list) {
        System.out.println(u);
    }
    System.out.println("-------после сортировки-----");
    Collections.sort(list);
    for (User u : list) {
        System.out.println(u);
    }
}
 }
}
방법의 결과 main:
-------до сортировки--------
{name='Андрей',  age=19,  email='andryha@mail.ru'}
{name='Олег',    age=25,  email='oleg@mail.ru'}
{name='Андрей',  age=24,  email='opr@google.com'}
{name='Игорь',   age=16,  email='igor@mail.ru'}
{name='Андрей',  age=44,  email='stary@google.com'}
-------после сортировки-----
{name='Андрей',  age=19,  email='andryha@mail.ru'}
{name='Андрей',  age=24,  email='opr@google.com'}
{name='Андрей',  age=44,  email='stary@google.com'}
{name='Игорь',   age=16,  email='igor@mail.ru'}
{name='Олег',    age=25,  email='oleg@mail.ru'}
그럼 요약해 보겠습니다. 모든 것의 순서를 지지하고 불필요한 코드 없이 객체를 배열이나 목록으로 정렬하려면 인터페이스를 사용하십시오 Comparable. CompareTo 메서드를 구현하면 클래스에서 객체를 자연스럽게 정렬하는 메커니즘을 구축하기가 매우 쉽습니다. compareToJava 라이브러리에 설명된 표준 클래스의 객체 컬렉션 및 배열로 작업해야 하는 경우 이러한 클래스에서 미리 만들어진 구현을 사용하십시오 .
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION