เปรียบเทียบเทียบกับตัวเปรียบเทียบใน Java
ความแตกต่างที่สำคัญระหว่าง Comparable และ Comparator ใน Java
- เทียบเคียงได้ใน Java เป็นวัตถุสำหรับเปรียบเทียบตัวเองกับวัตถุอื่น ในขณะที่ Comparator เป็นวัตถุสำหรับเปรียบเทียบวัตถุต่าง ๆ จากคลาสต่าง ๆ
- เปรียบเทียบให้
compareTo()วิธีการจัดเรียงองค์ประกอบใน Javaในขณะที่ Comparator ให้compare()วิธีการจัดเรียงองค์ประกอบใน Java. - มีอินเทอร์เฟซที่เทียบเคียงได้
java.langpackage ในขณะที่มีอินเทอร์เฟซ 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 ความแตกต่างหลักๆ มีดังนี้:

| เกณฑ์การเปรียบเทียบ | เทียบเคียง | เปรียบเทียบ |
|---|---|---|
| วิธี | เทียบเคียงให้ 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 ยกระดับการควบคุมที่มีต่อการเรียงลำดับข้อมูลอย่างมีนัยสำคัญ ซึ่งช่วยเพิ่มทั้งประสิทธิภาพและการใช้งาน
