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

ความแตกต่างระหว่าง Comparable และ Comparator ใน Java

ทั้ง Comparable และ Comparator เป็นอินเทอร์เฟซที่ใช้สำหรับจัดเรียง (sort) องค์ประกอบในคอลเลกชัน Comparator อยู่ในแพ็กเกจ java.util ส่วน Comparable อยู่ใน java.lang Comparator จัดเรียงโดยใช้อ็อบเจ็กต์สองตัวที่ส่งให้ ในขณะที่ Comparable เปรียบเทียบ "this" กับอ็อบเจ็กต์เดียวที่ส่งให้

ตารางเปรียบเทียบรายละเอียด

ลำดับ หัวข้อ Comparable Comparator
1 เมธอด มีเมธอด compareTo(Object o) มีเมธอด compare(Object o1, Object o2)
2 การใช้งานจัดเรียง ใช้ Collections.sort(List) สำหรับอ็อบเจ็กต์แบบ Comparable ใช้ Collections.sort(List, Comparator) สำหรับอ็อบเจ็กต์แบบ Comparator
3 ลำดับการจัดเรียง ให้ลำดับจัดเรียงเดียว (single sorting sequence) ให้หลายลำดับจัดเรียงได้ (multiple sorting sequences)
4 แพ็กเกจ java.lang package java.util package

ตัวอย่าง Comparable

public class Laptop implements Comparable<Laptop> {
    String name;
    int ram;
    int price;
    
    public Laptop(String name, int ram, int price) {
        this.name = name;
        this.ram = ram;
        this.price = price;
    }
    
    @Override
    public int compareTo(Laptop o) {
        if (this.ram > o.getRam())
            return 1;
        else
            return -1;
    }
    
    // getters/setters...
}

// การใช้งาน
List<Laptop> laptopList = new ArrayList<>();
laptopList.add(new Laptop("HCL", 16, 800));
laptopList.add(new Laptop("Apple", 8, 100));
laptopList.add(new Laptop("Dell", 4, 600));
Collections.sort(laptopList); // เรียงตาม RAM

ผลลัพธ์

4
8
16

ตัวอย่าง Comparator

import java.util.*;

public class LaptopComparator implements Comparator<Laptop> {
    @Override
    public int compare(Laptop o1, Laptop o2) {
        if (o1.getRam() < o2.getRam()) return -1;
        else if (o1.getRam() > o2.getRam()) return 1;
        else return 0;
    }
}

// การใช้งาน
List<Laptop> laptopList = new ArrayList<>();
// เพิ่มข้อมูล...
Comparator<Laptop> com = (o1, o2) -> o1.getName().compareTo(o2.getName());
Collections.sort(laptopList, com); // เรียงตามชื่อ

ผลลัพธ์

Apple
Dell
HCL

สรุป

Comparable ใช้สำหรับ "natural ordering" ของคลาส (จัดเรียงได้เพียงแบบเดียว) ส่วน Comparator ใช้เมื่อต้องการจัดเรียงหลายแบบ หรือไม่สามารถแก้ไขคลาสต้นฉบับได้ (เช่น คลาสจากไลบรารีภายนอก) สามารถสร้าง Comparator หลายตัวสำหรับคลาสเดียวกันได้