ความแตกต่างระหว่าง 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) วิธีการเปรียบเทียบทั้งวัตถุที่ระบุที่ถูกส่งผ่านไปยังวิธีการ |
รายการ / อาร์เรย์ | เมื่อรายการของวัตถุประเภทที่เปรียบเทียบได้จะต้องมีการเปรียบเทียบชั้นเก็บรวบรวมให้วิธีการเช่น 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 value หากวัตถุที่อ้างถึงมีค่ามากกว่าเมื่อเปรียบเทียบกับวัตถุที่ระบุคลาส 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 (รายการเปรียบเทียบ)
- อินเทอร์เฟซที่เปรียบเทียบได้ช่วยให้สามารถเรียงลำดับการเรียงลำดับเดียวซึ่งหมายความว่าคุณสามารถเปรียบเทียบองค์ประกอบข้อมูลเดียวของวัตถุในการเปรียบเทียบ () วิธีการในขณะที่ส่วนต่อประสานเปรียบเทียบช่วยให้ลำดับการเรียงลำดับหลายที่หมายความว่าคุณสามารถเปรียบเทียบองค์ประกอบข้อมูลหลาย ๆ
- อินเทอร์เฟซที่เปรียบเทียบได้ถูกนำมาใช้โดยคลาสที่มีวัตถุที่จะถูกเปรียบเทียบเนื่องจากตรรกะการเรียงลำดับถูกกำหนดภายในคลาสเดียวกัน ในทางตรงกันข้ามอินเทอร์เฟซตัวเปรียบเทียบไม่ถูกนำไปใช้โดยคลาสที่วัตถุจะถูกนำมาเปรียบเทียบเนื่องจากตรรกะการเรียงลำดับถูกกำหนดไว้ในคลาสที่แยกต่างหากซึ่งแต่ละคลาสกำหนดการเรียงลำดับบนองค์ประกอบข้อมูลเดี่ยวของวัตถุและคลาสที่กำหนดเหล่านี้ใช้อินเทอร์เฟซ .
- ส่วนต่อประสานที่เปรียบเทียบได้อยู่ในแพ็คเกจ java.lang ส่วนอินเตอร์เฟสเปรียบเทียบอยู่ภายในแพ็คเกจ java.util
- อินเทอร์เฟซที่เปรียบเทียบได้ประกาศเพียงวิธีเดียวที่เป็น ComparTo (Object obj) ในขณะที่อินเตอร์เฟสตัวเปรียบเทียบนั้นประกาศสองวิธีซึ่งคือ, เปรียบเทียบ (Object obj1, Object obj2) และเท่ากับ (Object obj)
- วิธีการ ComparTo (Object obj) ในการเปรียบเทียบวิธีการเปรียบเทียบการเรียกใช้วัตถุกับวัตถุที่ระบุส่งผ่านไปยังวิธีการในขณะที่วิธีการเปรียบเทียบ (Object obj1, Object obj2) ของ Comparator เปรียบเทียบวัตถุ obj1 กับ obj2 ที่ถูกส่งผ่านไปยังวิธีการ
- คลาส Collections มีวิธีการเรียงลำดับ“ Collections.sort (List lst)” เพื่อเรียงลำดับวัตถุชนิดที่เปรียบเทียบได้ คลาส Collections มีวิธีการเรียงลำดับ Collections.sort (รายการ Comparator) เพื่อเรียงลำดับวัตถุประเภท Comparator
สรุป:
หากคุณต้องการเรียงลำดับวัตถุตามลำดับธรรมชาติคุณสามารถใช้อินเทอร์เฟซที่เปรียบเทียบได้ซึ่งคุณต้องการเรียงลำดับวัตถุตามคุณลักษณะใด ๆ จากนั้นจะใช้อินเทอร์เฟซเปรียบเทียบ