แนะนำ, 2024

ตัวเลือกของบรรณาธิการ

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

Comparable และ Comparator ทั้งสองเป็นอินเตอร์เฟสทั่วไปใน Java ที่ใช้ในการเปรียบเทียบองค์ประกอบข้อมูลของวัตถุ ส่วนต่อประสานที่เปรียบเทียบได้มีอยู่ในแพ็คเกจ java.lang และส่วนต่อประสานตัวเปรียบเทียบมีอยู่ในแพ็คเกจ java.util ความแตกต่างพื้นฐานระหว่างอินเทอร์เฟซแบบเปรียบเทียบได้และแบบเปรียบเทียบคืออินเทอร์เฟซแบบเปรียบเทียบได้จัดลำดับการเรียงเดี่ยวขณะที่อินเตอร์เฟสแบบเปรียบเทียบให้ลำดับการเรียงแบบหลายแบบ มีความแตกต่างอื่น ๆ ระหว่างอินเทอร์เฟซแบบเปรียบเทียบได้และแบบเปรียบเทียบซึ่งเราจะศึกษาในกราฟเปรียบเทียบ

แผนภูมิเปรียบเทียบ

พื้นฐานสำหรับการเปรียบเทียบเทียบเคียงเปรียบเทียบ
ขั้นพื้นฐานส่วนต่อประสานที่เปรียบเทียบได้ช่วยให้สามารถเรียงลำดับได้เพียงลำดับเดียวอินเตอร์เฟสตัวเปรียบเทียบช่วยให้เรียงลำดับได้หลายชุด
แพคเกจส่วนต่อประสานที่เปรียบเทียบได้มีอยู่ในแพ็คเกจ java.langส่วนต่อประสาน Comparator นั้นมีอยู่ในแพ็คเกจ java.util
วิธีการอินเทอร์เฟซที่เปรียบเทียบได้ประกอบด้วยวิธีการเดียวเท่านั้น
การเปรียบเทียบ int สาธารณะ (Object obj);
ส่วนต่อประสานเปรียบเทียบมีสองวิธี
เปรียบเทียบ int สาธารณะ (Object obj1, Object obj2)
บูลีนเท่ากับ (Object obj)
การดำเนินงานอินเทอร์เฟซที่เปรียบเทียบได้ถูกใช้งานโดยคลาสที่มีวัตถุที่จะเปรียบเทียบอินเทอร์เฟซตัวเปรียบเทียบถูกนำมาใช้โดยคลาส sperate แทนที่จะเป็นคลาสที่มีอ็อบเจ็กต์ที่จะถูกเปรียบเทียบ
การเปรียบเทียบเมธอด comparTo (Object obj) เปรียบเทียบวัตถุที่ใช้เพื่อเรียกใช้เมธอดที่มีอ็อบเจ็กต์ที่ระบุส่งผ่านไปยังเมธอดการเปรียบเทียบ (Object obj1, Object obj2) วิธีการเปรียบเทียบทั้งวัตถุที่ระบุที่ถูกส่งผ่านไปยังวิธีการ
รายการ / อาร์เรย์เมื่อรายการของวัตถุประเภท Comparable จะต้องมีการเปรียบเทียบคลาสการรวบรวมให้วิธีการคือ Collections.sort (รายการ lst)เมื่อรายการของวัตถุประเภทที่เปรียบเทียบได้จะต้องมีการเปรียบเทียบชั้นคอลเลกชันให้วิธีการเช่น
Collections.sort (รายการตัวเปรียบเทียบ)

ความหมายของการเปรียบเทียบ

Comparable เป็นอินเตอร์เฟสที่มีอยู่ในแพ็คเกจ java.lang คลาสใช้อินเทอร์เฟซตัวเปรียบเทียบเพื่อเรียงลำดับวัตถุในธรรมชาติ วัตถุที่เรียงลำดับตามธรรมชาติหมายความว่าวัตถุถูกเปรียบเทียบโดยค่า ASCII คลาสที่ใช้อินเทอร์เฟซที่เปรียบเทียบได้คือไบต์, อักขระ, Double, Float, Long, Short, String และ Integer คลาส แม้แต่คลาส Date และ Calander ก็ใช้อินเตอร์เฟสที่เปรียบเทียบได้

อินเทอร์เฟซที่เปรียบเทียบได้มีเพียงวิธีเดียวที่เป็น CompareTo (Object obj) วิธีนี้เปรียบเทียบวัตถุที่ใช้ในการเรียกใช้วิธีการกับวัตถุที่ระบุในพารามิเตอร์ไวยากรณ์ของวิธีการดังต่อไปนี้:

 การเปรียบเทียบ int สาธารณะ (Object obj); 

เมธอด CompareTo (Object obj) ส่งคืนค่า 0 เมื่อทั้งสองวัตถุที่เปรียบเทียบโดยวิธีการมีค่าเดียวกันมันจะส่งกลับค่า -ve หากวัตถุที่เรียกใช้มีขนาดเล็กกว่าวัตถุที่ระบุและส่งกลับค่า + ve หากวัตถุที่อ้างมีมากกว่า ค่าเมื่อเปรียบเทียบกับวัตถุที่ระบุคลาส Collections มีวิธีการเรียงลำดับสำหรับการเรียงลำดับองค์ประกอบของรายการ องค์ประกอบของรายการ (และอาเรย์) ของประเภทที่เปรียบเทียบได้นั้นสามารถเรียงลำดับได้โดยใช้วิธี“ Collections.sort (List lst)”

ความหมายของตัวเปรียบเทียบ

Comparator เป็นอินเตอร์เฟสที่มีอยู่ในแพ็คเกจ java.util อินเทอร์เฟซตัวเปรียบเทียบไม่ถูกนำไปใช้กับคลาสที่มีวัตถุที่จะถูกเปรียบเทียบแทนคลาสแยกใช้อินเทอร์เฟซตัวเปรียบเทียบเพื่อให้ตรรกะการเรียงลำดับถูกนำไปใช้กับองค์ประกอบข้อมูลแต่ละส่วนของวัตถุในคลาสอื่น เครื่องมือเปรียบเทียบมีสองวิธีดังนี้:

 การเปรียบเทียบ int สาธารณะ (Object obj1, Object obj2) และบูลีนเท่ากับ (Object obj) 

การเปรียบเทียบ () วิธีการดังกล่าวข้างต้นเปรียบเทียบวัตถุแรก obj1 กับวัตถุที่สอง obj2 การเปรียบเทียบ () วิธีการคืน 0 เมื่อทั้งวัตถุเปรียบเทียบโดยวิธีการที่มีค่าเดียวกันมันจะส่งกลับค่า -ve หากวัตถุ obj1 มีขนาดเล็กกว่านั้นวัตถุ obj2 และส่งกลับค่า + ve หากวัตถุ obj1 มีค่ามากกว่าเมื่อเปรียบเทียบ ไปยังวัตถุ obj2 equals () วิธีการตรวจสอบว่าวัตถุที่ระบุมีค่าเท่ากับวัตถุที่เรียกใช้ วิธีการเท่ากับ () วิธีการส่งกลับ จริง ถ้าทั้งวัตถุที่เปรียบเทียบมีค่าเท่ากันก็จะส่งกลับ เท็จ คลาส Collections จัดเตรียมวิธีสำหรับการเรียงลำดับองค์ประกอบของรายการและชนิดตัวเปรียบเทียบ อิลิเมนต์รายการของชนิดตัวเปรียบเทียบถูกเรียงลำดับตามเมธอด Collections.sort (รายการ, ตัวเปรียบเทียบ)

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

  1. อินเทอร์เฟซที่เปรียบเทียบได้ช่วยให้สามารถเรียงลำดับการเรียงเดี่ยวซึ่งหมายความว่าคุณสามารถเปรียบเทียบองค์ประกอบข้อมูลเดียวของวัตถุในวิธี comparTo () ในอีกทางหนึ่งอินเทอร์เฟซเปรียบเทียบช่วยให้เรียงลำดับการเรียงลำดับหลายครั้ง
  2. อินเทอร์เฟซที่เปรียบเทียบได้ถูกนำมาใช้โดยคลาสที่มีวัตถุที่จะถูกเปรียบเทียบเนื่องจากตรรกะการเรียงลำดับถูกกำหนดไว้ภายในคลาสเดียวกัน ในทางตรงกันข้ามอินเทอร์เฟซ Comparator ไม่ได้ถูกใช้งานโดยคลาสที่มีวัตถุที่จะถูกเปรียบเทียบเนื่องจากตรรกะการเรียงลำดับถูกกำหนดไว้ในคลาสที่แยกต่างหากซึ่งแต่ละคลาสกำหนดการเรียงลำดับในองค์ประกอบข้อมูลเดียวของวัตถุและคลาสที่กำหนดเหล่านี้ .
  3. ส่วนต่อประสานที่เปรียบเทียบได้อยู่ในแพ็คเกจ java.lang ส่วนอินเตอร์เฟสเปรียบเทียบอยู่ภายในแพ็คเกจ java.util
  4. อินเทอร์เฟซที่เปรียบเทียบได้ประกาศเพียงวิธีเดียวที่เป็น ComparTo (Object obj) ในขณะที่อินเตอร์เฟสตัวเปรียบเทียบนั้นประกาศสองวิธีซึ่งคือ, เปรียบเทียบ (Object obj1, Object obj2) และเท่ากับ (Object obj)
  5. วิธีการ ComparTo (Object obj) ในการเปรียบเทียบวิธีการเปรียบเทียบการเรียกใช้วัตถุกับวัตถุที่ระบุส่งผ่านไปยังวิธีการในขณะที่วิธีการเปรียบเทียบ (Object obj1, Object obj2) ของ Comparator เปรียบเทียบวัตถุ obj1 กับ obj2 ที่ถูกส่งผ่านไปยังวิธีการ
  6. คลาส Collections มีวิธีการเรียงลำดับ“ Collections.sort (List lst)” เพื่อเรียงลำดับวัตถุชนิดที่เปรียบเทียบได้ คลาส Collections มีวิธีการเรียงลำดับ Collections.sort (รายการ Comparator) เพื่อเรียงลำดับวัตถุประเภท Comparator

สรุป:

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

Top