logo

Java 비교기 인터페이스

Java 비교기 인터페이스 사용자 정의 클래스의 개체를 정렬하는 데 사용됩니다.

이 인터페이스는 java.util 패키지에 있으며 Compare(Object obj1,Object obj2) 및 equals(Object 요소) 2가지 메서드를 포함합니다.

이는 여러 정렬 순서를 제공합니다. 즉, 롤노(rollno), 이름, 나이 등 모든 데이터 멤버를 기준으로 요소를 정렬할 수 있습니다.

Java 비교기 인터페이스의 방법

방법설명
공개 int 비교(객체 obj1, 객체 obj2)첫 번째 개체와 두 번째 개체를 비교합니다.
공개 부울은 같음(객체 obj)현재 개체와 지정된 개체를 비교하는 데 사용됩니다.
공개 부울은 같음(객체 obj)현재 개체와 지정된 개체를 비교하는 데 사용됩니다.

컬렉션 클래스

컬렉션 클래스는 컬렉션의 요소를 정렬하기 위한 정적 메서드를 제공합니다. 컬렉션 요소가 Set 또는 Map인 경우 TreeSet 또는 TreeMap을 사용할 수 있습니다. 그러나 List의 요소를 정렬할 수는 없습니다. Collections 클래스는 List 유형 요소의 요소를 정렬하는 메서드도 제공합니다.

List 요소를 정렬하기 위한 Collections 클래스의 방법

공개 무효 정렬(목록 목록, 비교기 c): 주어진 비교기로 List의 요소를 정렬하는 데 사용됩니다.


Java 비교기 예(비일반 이전 스타일)

나이와 이름을 기준으로 List의 요소를 정렬하는 예를 살펴보겠습니다. 이 예에서는 4개의 Java 클래스를 만들었습니다.

  1. Student.java
  2. AgeComparator.java
  3. 이름Comparator.java
  4. Simple.java
Student.java

이 클래스에는 세 개의 필드인 Rollno, 이름, 나이와 매개변수화된 생성자가 포함되어 있습니다.

 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

이 클래스는 연령을 기준으로 비교 논리를 정의합니다. 첫 번째 개체의 수명이 두 번째 개체보다 크면 양수 값을 반환합니다. 1, 2, 10 등 누구든지 될 수 있습니다. 첫 번째 개체의 age가 두 번째 개체보다 작으면 음수 값을 반환하고, 어떤 음수 값이든 가능하며, 두 개체의 age가 같으면 우리는 0을 반환합니다.

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

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

 import java.util.*; class NameComparator implements Comparator{ public int compare(Object o1,Object o2){ Student s1=(Student)o1; Student s2=(Student)o2; return s1.name.compareTo(s2.name); } } 
Simple.java

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

 import java.util.*; import java.io.*; class Simple{ 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)); System.out.println('Sorting by Name'); Collections.sort(al,new NameComparator()); Iterator itr=al.iterator(); while(itr.hasNext()){ Student st=(Student)itr.next(); System.out.println(st.rollno+' '+st.name+' '+st.age); } System.out.println('Sorting by age'); Collections.sort(al,new AgeComparator()); Iterator itr2=al.iterator(); while(itr2.hasNext()){ Student st=(Student)itr2.next(); 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 

Java 비교기 예(일반)

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() 메서드를 사용합니다.

 import java.util.*; class NameComparator implements Comparator{ public int compare(Student s1,Student s2){ return s1.name.compareTo(s2.name); } } 
Simple.java

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

 import java.util.*; import java.io.*; class Simple{ 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)); System.out.println('Sorting by Name'); Collections.sort(al,new NameComparator()); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } System.out.println('Sorting by age'); Collections.sort(al,new AgeComparator()); 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 

Java 8 비교기 인터페이스

Java 8 Comparator 인터페이스는 하나의 추상 메소드만 포함하는 기능적 인터페이스입니다. 이제 Comparator 인터페이스를 람다 식 또는 메서드 참조에 대한 할당 대상으로 사용할 수 있습니다.

Java 8 비교기 인터페이스의 방법

방법설명
정수 비교(T o1, T o2)첫 번째 개체와 두 번째 개체를 비교합니다.
공전비교기 비교(Function keyExtractor)T 유형에서 Comparable 정렬 키를 추출하는 함수를 받아들이고 해당 정렬 키로 비교하는 Comparator를 반환합니다.
정적 비교기 비교(Function keyExtractor, Comparator keyComparator)T 유형에서 정렬 키를 추출하는 함수를 받아들이고 지정된 Comparator를 사용하여 해당 정렬 키로 비교하는 Comparator를 반환합니다.
정적 비교기 비교Double(ToDoubleFunction keyExtractor)T 유형에서 이중 정렬 키를 추출하는 함수를 허용하고 해당 정렬 키로 비교하는 비교기를 반환합니다.
정적 비교기 비교Int(ToIntFunction keyExtractor)T 유형에서 int 정렬 키를 추출하는 함수를 받아들이고 해당 정렬 키로 비교하는 비교기를 반환합니다.
정적 비교기 비교Long(ToLongFunction keyExtractor)T 유형에서 긴 정렬 키를 추출하는 함수를 허용하고 해당 정렬 키로 비교하는 비교기를 반환합니다.
부울 같음(객체 obj)현재 개체와 지정된 개체를 비교하는 데 사용됩니다.
공전비교기 naturalOrder()Comparable 객체를 자연 순서로 비교하는 비교기를 반환합니다.
정적 비교기 nullsFirst(비교기 비교기)null을 null이 아닌 요소보다 작게 처리하는 비교기를 반환합니다.
static Comparator nullsLast(비교기 비교기)null을 null이 아닌 요소보다 크게 처리하는 비교기를 반환합니다.
기본 비교기 reversed()제공된 비교기의 역순을 포함하는 비교기를 반환합니다.
공전비교기 reverseOrder()자연 순서의 역순을 포함하는 비교기를 반환합니다.
기본 비교기 thenComparing(다른 비교기)다른 비교기와 함께 사전순 비교기를 반환합니다.
기본비교기 thenComparing(기능 키 추출기)Comparable 정렬 키를 추출하는 함수와 함께 사전순 비교기를 반환합니다.
기본 비교기 thenComparing(Function keyExtractor, Comparator keyComparator)주어진 비교기와 비교할 키를 추출하는 함수와 함께 사전식 순서 비교기를 반환합니다.
기본 비교기 thenComparingDouble(ToDoubleFunction keyExtractor)이중 정렬 키를 추출하는 함수가 포함된 사전순 비교기를 반환합니다.
기본 비교기 thenComparingInt(ToIntFunction keyExtractor)int 정렬 키를 추출하는 함수가 포함된 사전순 비교기를 반환합니다.
기본 비교기 thenComparingLong(ToLongFunction keyExtractor)긴 정렬 키를 추출하는 함수가 포함된 사전식 순서 비교기를 반환합니다.

Java 8 비교기 예

나이와 이름을 기준으로 List의 요소를 정렬하는 예를 살펴보겠습니다.

파일: 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; } public int getRollno() { return rollno; } public void setRollno(int rollno) { this.rollno = rollno; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 

파일: TestSort1.java

 import java.util.*; public class TestSort1{ 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)); //Sorting elements on the basis of name Comparator cm1=Comparator.comparing(Student::getName); Collections.sort(al,cm1); System.out.println('Sorting by Name'); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } //Sorting elements on the basis of age Comparator cm2=Comparator.comparing(Student::getAge); Collections.sort(al,cm2); System.out.println('Sorting by Age'); 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 

Java 8 비교기 예: nullsFirst() 및 nullsLast() 메서드

여기서는 null도 포함하는 요소 목록을 정렬합니다.

파일: 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; } public int getRollno() { return rollno; } public void setRollno(int rollno) { this.rollno = rollno; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 

파일: TestSort2.java

 import java.util.*; public class TestSort2{ 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,null,21)); Comparator cm1=Comparator.comparing(Student::getName,Comparator.nullsFirst(String::compareTo)); Collections.sort(al,cm1); System.out.println('Considers null to be less than non-null'); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } Comparator cm2=Comparator.comparing(Student::getName,Comparator.nullsLast(String::compareTo)); Collections.sort(al,cm2); System.out.println('Considers null to be greater than non-null'); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } } 
 Considers null to be less than non-null 105 null 21 106 Ajay 27 101 Vijay 23 Considers null to be greater than non-null 106 Ajay 27 101 Vijay 23 105 null 21