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.javaclass 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