Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่าง compareTo() และ compare() methods ใน Java

อินเทอร์เฟซ Comparable มีเมธอด compareTo() สำหรับการจัดลำดับออบเจ็กต์ การจัดลำดับนี้เรียกว่า natural ordering ของคลาส และเมธอด compareTo() เรียกว่า natural comparison method อินเทอร์เฟซ Comparator มีเมธอดสำหรับทำ การเรียงลำดับ (sorting operations) โดยใช้ Comparator interface เราสามารถทำ multiple sorting sequences ได้ สามารถเรียงออบเจ็กต์ตามสมาชิกข้อมูลหลายตัวได้

compareTo()

เมธอด compareTo() เปรียบเทียบออบเจ็กต์นี้กับออบเจ็กต์ o1 และ คืนค่า integer

Syntax

public int compareTo(Object o1)
  • คืนค่าติดลบ (–ve) ก็ต่อเมื่อออบเจ็กต์นี้น้อยกว่า o1
  • คืนค่าบวก (+ve) ก็ต่อเมื่อออบเจ็กต์นี้มากกว่า o1
  • คืนค่า 0 ก็ต่อเมื่อออบเจ็กต์นี้เท่ากับ o1

ตัวอย่าง

import java.util.*;
class Employee implements Comparable {
    String name;
    int age;
    Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // overridden compareTo method
    @Override
    public int compareTo(Object o) {
        return this.age - ((Employee) o).age;
    }
}
public class ComparableDemo {
    public static void main(String[] args) {
        // CREATION
        List list = new ArrayList<>();
        // INSERTION
        list.add(new Employee("Krishna", 30));
        list.add(new Employee("Archana", 28));
        list.add(new Employee("Vineet", 25));
        list.add(new Employee("Ramesh", 38));
        list.add(new Employee("Alok", 28));
        System.out.println("Before sorting: ");
        for (Employee e : list) {
            System.out.print("[ EMP : age = " + e.age + " ] ");
        }
        // SORTING
        Collections.sort(list);
        System.out.println("\nAfter sorting: ");
        for (Employee e : list) {
            System.out.print("[ EMP : age = " + e.age + " ] ");
        }
    }
}

ผลลัพธ์

Before sorting: [ EMP : age = 30 ] [ EMP : age = 28 ] [ EMP : age = 25 ] [ EMP : age = 38 ] [ EMP : age = 28 ]
After sorting: [ EMP : age = 25 ] [ EMP : age = 28 ] [ EMP : age = 28 ] [ EMP : age = 30 ] [ EMP : age = 38 ]

compare()

เมธอด compare() เปรียบเทียบออบเจ็กต์แรกกับออบเจ็กต์ที่สอง และ คืนค่า integer

Syntax

public int compare(Object o1, Object o2)
  • คืนค่าติดลบ (–ve) ก็ต่อเมื่อ o1 น้อยกว่า o2
  • คืนค่าบวก (+ve) ก็ต่อเมื่อ o1 มากกว่า o2
  • คืนค่า 0 ก็ต่อเมื่อ o1 เท่ากับ o2

ตัวอย่าง

import java.util.*;
class Student {
    String name;
    int age, roll;
    Student(String name, int age, int roll) {
        this.name = name;
        this.age = age;
        this.roll = roll;
    }
}
class AgeComparator implements Comparator {
    @Override
    public int compare(Object o1, Object o2) {
        return ((Student) o1).age - ((Student) o2).age;
    }
}
class RollComparator implements Comparator {
    @Override
    public int compare(Object o1, Object o2) {
        return ((Student) o1).roll - ((Student) o2).roll;
    }
}
public class ComparatorDemo {
    public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add(new Student("Ramesh", 30, 20));
        list.add(new Student("Adithya", 7, 10));
        list.add(new Student("Krishna", 25, 5));
        list.add(new Student("Vineet", 24, 15));
        System.out.println("BEFORE SORTING");
        for (Student e : list) {
            System.out.println("[ STU : name = " + e.name + " age = " + e.age + " roll = " + e.roll + "]");
        }
        Collections.sort(list, new AgeComparator());
        System.out.println("AFTER SORTING WITH AGE");
        for (Student e : list) {
            System.out.println("[ STU : name = " + e.name + " age = " + e.age + " ]");
        }
        Collections.sort(list, new RollComparator());
        System.out.println("AFTER SORTING WITH ROLL");
        for (Student e : list) {
            System.out.println("[ STU : name = " + e.name + " roll = " + e.roll + " ]");
        }
    }
}

ผลลัพธ์

BEFORE SORTING
[ STU : name = Ramesh age = 30 roll = 20 ]
[ STU : name = Adithya age = 7 roll = 10 ]
[ STU : name = Krishna age = 25 roll = 5 ]
[ STU : name = Vineet age = 24 roll = 15 ]
AFTER SORTING WITH AGE
[ STU : name = Adithya age = 7 ]
[ STU : name = Vineet age = 24 ]
[ STU : name = Krishna age = 25 ]
[ STU : name = Ramesh age = 30 ]
AFTER SORTING WITH ROLL
[ STU : name = Krishna roll = 5 ]
[ STU : name = Adithya roll = 10 ]
[ STU : name = Vineet roll = 15 ]
[ STU : name = Ramesh roll = 20 ]