เปรียบเทียบเทียบกับตัวเปรียบเทียบใน Java

ความแตกต่างที่สำคัญระหว่าง Comparable และ Comparator ใน Java

  • เทียบเคียงได้ใน Java เป็นวัตถุสำหรับเปรียบเทียบตัวเองกับวัตถุอื่น ในขณะที่ Comparator เป็นวัตถุสำหรับเปรียบเทียบวัตถุต่าง ๆ จากคลาสต่าง ๆ
  • เปรียบเทียบให้ compareTo() วิธีการจัดเรียงองค์ประกอบใน Javaในขณะที่ Comparator ให้ compare() วิธีการจัดเรียงองค์ประกอบใน Java.
  • มีอินเทอร์เฟซที่เทียบเคียงได้ java.lang package ในขณะที่มีอินเทอร์เฟซ Comparator อยู่ java.util บรรจุภัณฑ์
  • Comparable ให้ลำดับการเรียงลำดับเดียว ในขณะที่ Comparator ให้ลำดับการเรียงลำดับหลายรายการ
  • Comparable ส่งผลต่อคลาสดั้งเดิม ในขณะที่ Comparator ไม่มีผลกับคลาสดั้งเดิม

ความแตกต่างระหว่างการเปรียบเทียบและการเปรียบเทียบ
ความแตกต่างระหว่างการเปรียบเทียบและการเปรียบเทียบ

ที่นี่ ฉันได้วิเคราะห์ความแตกต่างระหว่างการเปรียบเทียบและตัวเปรียบเทียบ และจะประเมินข้อดีและข้อเสียอย่างครอบคลุม

สิ่งที่เปรียบเทียบได้ใน Java?

เทียบเคียง in Java เป็นวัตถุที่เปรียบเทียบตัวเองกับวัตถุอื่น ช่วยในการเรียงลำดับรายการของวัตถุที่กำหนดเอง Java.lang. อินเทอร์เฟซที่เปรียบเทียบได้ควรได้รับการนำไปใช้โดยคลาสเพื่อเปรียบเทียบอินสแตนซ์ของมัน อาร์เรย์ของอ็อบเจ็กต์ที่ใช้งานอินเทอร์เฟซที่เปรียบเทียบได้จะถูกเรียงลำดับโดยอัตโนมัติตาม Arrays.sort และ Collections.sort วิธีการ

วิธีที่ใช้ในการเปรียบเทียบ

ฉันอยากจะเน้นวิธีการสำคัญที่ฉันมักใช้ในอินเทอร์เฟซที่เปรียบเทียบได้:

เปรียบเทียบกับ():

วิธี CompareTo() ใช้ในการเรียงลำดับสตริงแบบธรรมชาติ ความหมายของการเรียงลำดับแบบธรรมชาติคือลำดับการเรียงลำดับที่ใช้กับอ็อบเจ็กต์ เช่น ลำดับตัวเลขสำหรับการเรียงลำดับจำนวนเต็ม ลำดับตัวอักษรสำหรับสตริง เป็นต้น

ไวยากรณ์ของ CompareTo() วิธีการมีดังนี้:

int compareTo(T obj)

ในรูปแบบข้างต้น T หมายถึงประเภทของออบเจ็กต์ที่คุณจะเปรียบเทียบ

CompareTo() วิธีการเปรียบเทียบวัตถุกับ T obj

Output:

  • จะส่งกลับ 0 ถ้าค่าเท่ากัน
  • หากวัตถุมีค่าต่ำกว่า วิธีการนี้จะส่งคืนค่าลบ
  • หากวัตถุมีค่าสูงกว่าก็จะส่งกลับค่าบวก

ตัวอย่างการเปรียบเทียบใน Java

โปรแกรมต่อไปนี้ Java ตัวอย่างการเปรียบเทียบแสดงให้เห็นการเปรียบเทียบระหว่างตัวอักษรสองตัว คือ “a” และ “b” โดยตัวอักษร “a” จะอยู่ก่อนตัวอักษร “b” ตามลำดับตัวอักษร

ดังนั้นเอาท์พุตคือ -1 อักขระ "b" มาหลัง "a" ตามลำดับตัวอักษร ดังนั้น ผลลัพธ์ที่ได้คือ 1 อักขระ "a" และ "b" มีค่าเท่ากันทั้งคู่ ดังนั้นเอาต์พุตจึงเป็น 0

public class Sample_String {
    public static void main(String[] args) {
        String str_Sample = "a";
        System.out.println("Compare To 'a' b is : " + str_Sample.compareTo("b"));
        str_Sample = "b";
        System.out.println("Compare To 'b' a is : " + str_Sample.compareTo("a"));
        str_Sample = "b";
        System.out.println("Compare To 'b' b is : " + str_Sample.compareTo("b"));
    }
}

เอาท์พุต

Compare To 'a' b is : -1
Compare To 'b' a is : 1
Compare To 'b' b is : 0

ตัวเปรียบเทียบคืออะไร Java?

นักเปรียบเทียบ in Java เป็นวัตถุสำหรับเปรียบเทียบวัตถุต่าง ๆ จากคลาสต่าง ๆ อินเทอร์เฟซตัวเปรียบเทียบใน Java ยังใช้ในการจัดเรียงอ็อบเจ็กต์ของคลาสที่ผู้ใช้กำหนด ซึ่งรวมถึงเมธอดอินเทอร์เฟซตัวเปรียบเทียบที่สำคัญสองเมธอดที่เรียกว่า compare (Object obj1, Object obj2) และ equals (Object element)

วิธีที่ใช้ในการเปรียบเทียบ

ในทางปฏิบัติของฉัน ฉันมักจะพึ่งพาวิธีวิจารณ์ต่อไปนี้ของอินเทอร์เฟซตัวเปรียบเทียบ:

เปรียบเทียบ():

Compare() ช่วยให้คุณสามารถสั่งซื้อวัตถุได้ เมื่อต้องการทำเช่นนี้ คุณต้องสร้างคลาสที่ใช้อินเทอร์เฟซตัวเปรียบเทียบ หลังจากนี้ คุณจะต้องแทนที่วิธีการเปรียบเทียบ

ไวยากรณ์ของ compare() วิธีการมีดังนี้:

compare(Object obj1, Object obj2)

ในรูปแบบข้างต้น obj1 และ obj2 เป็นวัตถุสองชิ้นที่คุณต้องเปรียบเทียบโดยใช้เมธอด comparison() compare() วิธี

Output:

  • จะส่งกลับจำนวนเต็มลบหากอาร์กิวเมนต์แรกน้อยกว่าอาร์กิวเมนต์ที่สอง
  • ส่งกลับค่าศูนย์ถ้าอาร์กิวเมนต์แรกและอาร์กิวเมนต์ที่สองเท่ากัน
  • วิธีนี้สามารถส่งคืนจำนวนเต็มบวกในกรณีที่อาร์กิวเมนต์แรกมากกว่าวินาที

คุณต้องแน่ใจว่าความสัมพันธ์เป็นแบบสกรรมกริยา ตัวอย่างเช่น ((compare(a, b)>0) && (compare(b, c)>0)) ซึ่งหมายถึง comparison(a, c)>0

ตัวอย่างการเปรียบเทียบใน Java

ในด้านล่าง Java ตัวอย่างตัวเปรียบเทียบมี 6 ตัว ตัวแปร- “x”, “y”, “p”, “q”, “r” และ “s” เอาต์พุตเป็น -1 เท่ากับค่า "x", 20 น้อยกว่าค่า "y", 30 เอาต์พุตเป็น 0 เนื่องจากค่า "p", 40 เท่ากับค่า "q", 40 .

import java.lang.Integer; 
public class example { 
    public static void main(String args[]) 
    { 
        int x = 20; 
        int y = 30; 
        // as 10 less than 20, 
        // Output will be a value less than zero 
        System.out.println(Integer.compare(x, y)); 
        int p = 40; 
        int q = 40; 
        // as 30 equals 30, 
        // Output will be zero 
        System.out.println(Integer.compare(p, q)); 
        int r = 20; 
        int s = 7; 
        // as 15 is greater than 8, 
        // Output will be a value greater than zero 
        System.out.println(Integer.compare(r, s)); 
    } 
}

Output:

-1
0
1

เท่ากับ():

Equals() ตรวจสอบว่าวัตถุ number เท่ากับวัตถุซึ่งถูกส่งผ่านเป็นอาร์กิวเมนต์หรือไม่

ไวยากรณ์ของ equals() วิธีการมีดังนี้:

public boolean equals(Object o)

วิธีการนี้รับพารามิเตอร์สองตัว: 1) วัตถุใดๆ และ 2) ค่าที่ส่งคืน มันจะคืนค่าเป็นจริงหากอาร์กิวเมนต์ที่ส่งไม่เป็นโมฆะและเป็นวัตถุประเภทเดียวกันที่มีค่าตัวเลขเหมือนกัน

ตัวอย่างวิธีเท่ากับ:

ในตัวอย่างด้านล่าง ฉันจะเปรียบเทียบตัวแปรทั้งสี่ตัวด้วยกัน ตัวแปรสามตัวเป็นประเภทจำนวนเต็ม และอีกหนึ่งตัวแปรเป็นประเภทสั้น ผลลัพธ์แรกเป็นเท็จ เนื่องจากค่าของ p ซึ่งก็คือ 5 ไม่เท่ากับค่าของ q ซึ่งก็คือ 20

ผลลัพธ์ที่สองเป็นจริงเนื่องจากค่าของตัวแปร p และ r เท่ากัน ซึ่งก็คือ 5 สุดท้ายผลลัพธ์จะเป็นเท็จ เนื่องจากตัวแปร p และ s มีค่าที่กำหนดต่างกัน

public class Test { 
   public static void main(String args[]) {
      Integer p = 5;
      Integer q = 20;
      Integer r =5;
      Short s = 5;
      System.out.println(p.equals(q));  
      System.out.println(p.equals(r)); 
      System.out.println(p.equals(s));
   }
}

เอาท์พุต

false
true
false

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

ฉันมักพบเห็นความสับสนระหว่าง Java Comparable และ Comparator ความแตกต่างหลักๆ มีดังนี้:

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

เกณฑ์การเปรียบเทียบ เทียบเคียง เปรียบเทียบ
วิธี เทียบเคียงให้ compareTo() วิธีการจัดเรียงองค์ประกอบใน Java. เครื่องเปรียบเทียบให้ compare() วิธีการจัดเรียงองค์ประกอบใน Java.
แพ็คเกจ มีอินเทอร์เฟซที่เทียบเคียงได้ java.lang บรรจุภัณฑ์ มีอินเทอร์เฟซตัวเปรียบเทียบอยู่ใน java.util บรรจุภัณฑ์
ตรรกะของการเรียงลำดับ ตรรกะของการเรียงลำดับจะต้องอยู่ในคลาสเดียวกันกับวัตถุที่คุณจะเรียงลำดับ ตรรกะของการเรียงลำดับควรอยู่ในคลาสที่แยกจากกันเพื่อเขียนการเรียงลำดับที่แตกต่างกันตามคุณลักษณะที่แตกต่างกันของวัตถุ
วัตถุคลาส คลาสที่มีวัตถุที่คุณต้องการเรียงลำดับต้องใช้อินเทอร์เฟซที่เปรียบเทียบได้ คลาสที่มีอ็อบเจ็กต์ที่คุณต้องการเรียงลำดับไม่จำเป็นต้องใช้อินเทอร์เฟซตัวเปรียบเทียบ
การเรียงลำดับลำดับ มันมีลำดับการเรียงลำดับเดี่ยว มีลำดับการเรียงลำดับหลายแบบ
การเรียงลำดับ วิธีนี้สามารถจัดเรียงข้อมูลตามลำดับการเรียงลำดับตามธรรมชาติ วิธีนี้จะเรียงลำดับข้อมูลตามลำดับการจัดเรียงที่กำหนดเอง
ชั้น มันส่งผลต่อคลาสเดิม กล่าวคือ ชั้นเรียนที่แท้จริงมีการเปลี่ยนแปลง ไม่ส่งผลกระทบต่อคลาสดั้งเดิม กล่าวคือ คลาสจริงจะไม่ถูกเปลี่ยนแปลง
การใช้ ใช้งานบ่อยครั้งใน API ตามปฏิทิน คลาส Wrapper วันที่ และ
สตริง
มันถูกนำไปใช้เพื่อเรียงลำดับอินสแตนซ์ของคลาสบุคคลที่สาม
Implement คลาส wrapper และคลาสสตริงทั้งหมดใช้อินเทอร์เฟซที่เทียบเคียงได้ คลาส Comparator ที่ใช้งานเพียงคลาสเดียวคือ Collator และ RuleBasedColator

แนวทางปฏิบัติที่ดีที่สุดในการใช้ตัวเปรียบเทียบและตัวเปรียบเทียบได้ใน Java

  • ใช้อินเทอร์เฟซที่เทียบเคียงได้เมื่อการเปรียบเทียบเป็นมาตรฐานสำหรับคลาสเฉพาะ
  • คุณสามารถใช้แลมบ์ดากับตัวเปรียบเทียบได้
  • คลาสหลักจำนวนมากที่มีอยู่ใช้อินเทอร์เฟซที่เทียบเคียงได้
  • คุณสามารถใช้ TreeSet และ TreeMap ในขณะที่เรียงลำดับ Set หรือ Map
  • เค้ก compareTo() วิธีการทำงานร่วมกับตัวเปรียบเทียบและการเปรียบเทียบ
  • ใช้อินเทอร์เฟซตัวเปรียบเทียบเฉพาะเมื่อคุณ < ต้องการความยืดหยุ่นมากขึ้นเท่านั้น
  • เค้ก compareTo() เมธอดจะส่งกลับจำนวนเต็มบวกหากวัตถุแรกมากกว่าอีกอัน ส่งกลับค่าลบหากต่ำกว่า และศูนย์หากทั้งคู่เท่ากัน

วิธีการเลือกระหว่างตัวเปรียบเทียบและตัวเปรียบเทียบ

สรุปแล้ว ประสบการณ์จริงของฉันชี้ให้เห็นว่าการใช้ประโยชน์จาก Comparable และ Comparator ใน Java ยกระดับการควบคุมที่มีต่อการเรียงลำดับข้อมูลอย่างมีนัยสำคัญ ซึ่งช่วยเพิ่มทั้งประสิทธิภาพและการใช้งาน