logo

비교 가능과 비교기의 차이점

Comparable과 Comparator는 모두 인터페이스이며 컬렉션 요소를 정렬하는 데 사용할 수 있습니다.

그러나 아래에 나와 있는 Comparable 인터페이스와 Comparator 인터페이스 간에는 많은 차이점이 있습니다.

long에서 int로 자바
유사한비교기
1) 비교 가능한 항목은 다음을 제공합니다. 단일 정렬 순서 . 즉, ID, 이름, 가격과 같은 단일 요소를 기준으로 컬렉션을 정렬할 수 있습니다.비교기는 다음을 제공합니다. 다중 정렬 순서 . 즉, ID, 이름, 가격 등과 같은 여러 요소를 기준으로 컬렉션을 정렬할 수 있습니다.
2) 비교 가능 원래 클래스에 영향을 미칩니다 즉, 실제 클래스가 수정됩니다.비교기 원래 클래스에 영향을 미치지 않습니다 즉, 실제 클래스는 수정되지 않습니다.
3) 비교 가능한 제공 CompareTo() 메서드 요소를 정렬합니다.비교기는 다음을 제공합니다. 비교() 메소드 요소를 정렬합니다.
4) 비교 대상이 다음에 존재합니다. java.lang 패키지.비교기가 존재합니다. java.util 패키지.
5) Comparable 유형의 목록 요소를 다음과 같이 정렬할 수 있습니다. Collections.sort(목록) 방법.Comparator 유형의 목록 요소를 다음과 같이 정렬할 수 있습니다. Collections.sort(목록, 비교기) 방법.

Java 비교 예

연령을 기준으로 목록 요소를 정렬하는 Comparable 인터페이스의 예를 살펴보겠습니다.

파일: TestSort3.java

jframe
 //Java Program to demonstrate the use of Java Comparable. //Creating a class which implements Comparable Interface import java.util.*; import java.io.*; class Student implements Comparable{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } public int compareTo(Student st){ if(age==st.age) return 0; else if(age>st.age) return 1; else return -1; } } //Creating a test class to sort the elements public class TestSort3{ public static void main(String args[]){ ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,'Jai',21)); Collections.sort(al); for(Student st:al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } } 
지금 테스트해보세요

산출:

 105 Jai 21 101 Vijay 23 106 Ajay 27 

Java 비교기 예

다양한 비교기를 사용하여 목록의 요소를 정렬하는 Java Comparator 인터페이스의 예를 살펴보겠습니다.

Student.java
 class Student{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } } 
AgeComparator.java
 import java.util.*; class AgeComparator implements Comparator{ public int compare(Student s1,Student s2){ if(s1.age==s2.age) return 0; else if(s1.age>s2.age) return 1; else return -1; } } 
이름Comparator.java

이 클래스는 이름을 기반으로 비교 논리를 제공합니다. 이러한 경우 내부적으로 비교 논리를 제공하는 String 클래스의 CompareTo() 메서드를 사용합니다.

int를 문자열 java로 변환하는 방법
 import java.util.*; class NameComparator implements Comparator{ public int compare(Student s1,Student s2){ return s1.name.compareTo(s2.name); } } 
TestComparator.java

이 클래스에서는 이름과 나이를 기준으로 정렬하여 개체의 값을 인쇄합니다.

 //Java Program to demonstrate the use of Java Comparator import java.util.*; import java.io.*; class TestComparator{ public static void main(String args[]){ //Creating a list of students ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,'Jai',21)); System.out.println('Sorting by Name'); //Using NameComparator to sort the elements Collections.sort(al,new NameComparator()); //Traversing the elements of list for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } System.out.println('sorting by Age'); //Using AgeComparator to sort the elements Collections.sort(al,new AgeComparator()); //Travering the list again for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } } 

산출:

 Sorting by Name 106 Ajay 27 105 Jai 21 101 Vijay 23 Sorting by Age 105 Jai 21 101 Vijay 23 106 Ajay 27