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 (รายการ, ตัวเปรียบเทียบ)
ความแตกต่างที่สำคัญระหว่างเปรียบเทียบและเปรียบเทียบ
- อินเทอร์เฟซที่เปรียบเทียบได้ช่วยให้สามารถเรียงลำดับการเรียงเดี่ยวซึ่งหมายความว่าคุณสามารถเปรียบเทียบองค์ประกอบข้อมูลเดียวของวัตถุในวิธี comparTo () ในอีกทางหนึ่งอินเทอร์เฟซเปรียบเทียบช่วยให้เรียงลำดับการเรียงลำดับหลายครั้ง
- อินเทอร์เฟซที่เปรียบเทียบได้ถูกนำมาใช้โดยคลาสที่มีวัตถุที่จะถูกเปรียบเทียบเนื่องจากตรรกะการเรียงลำดับถูกกำหนดไว้ภายในคลาสเดียวกัน ในทางตรงกันข้ามอินเทอร์เฟซ Comparator ไม่ได้ถูกใช้งานโดยคลาสที่มีวัตถุที่จะถูกเปรียบเทียบเนื่องจากตรรกะการเรียงลำดับถูกกำหนดไว้ในคลาสที่แยกต่างหากซึ่งแต่ละคลาสกำหนดการเรียงลำดับในองค์ประกอบข้อมูลเดียวของวัตถุและคลาสที่กำหนดเหล่านี้ .
- ส่วนต่อประสานที่เปรียบเทียบได้อยู่ในแพ็คเกจ 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
สรุป:
หากคุณต้องการเรียงลำดับวัตถุตามลำดับอย่างเป็นธรรมชาติคุณสามารถใช้อินเทอร์เฟซที่เปรียบเทียบได้ซึ่งคุณต้องการเรียงลำดับวัตถุตามคุณลักษณะใด ๆ จากนั้นจะใช้อินเทอร์เฟซตัวเปรียบเทียบ