บทนำเทียบเคียงได้
เปรียบเทียบได้คืออินเทอร์เฟซการเรียงลำดับ
หากคลาสใช้อินเทอร์เฟซที่เปรียบเทียบได้นั่นหมายถึง "คลาสนี้รองรับการเรียงลำดับ" เนื่องจากคลาสที่ใช้การเรียงลำดับการสนับสนุนอินเทอร์เฟซที่เปรียบเทียบได้สมมติว่าตอนนี้มี "รายการ (หรืออาร์เรย์) ของวัตถุของคลาสที่ใช้อินเทอร์เฟซที่เปรียบเทียบได้" รายการรายการ (หรืออาร์เรย์) สามารถเรียงลำดับได้โดยคอลเลกชัน
นอกจากนี้ "วัตถุของคลาสที่ใช้อินเทอร์เฟซที่เปรียบเทียบได้" สามารถใช้เป็นคีย์ใน "แผนที่ที่สั่งซื้อ (เช่น treemap)" หรือองค์ประกอบใน "ชุดที่สั่งซื้อ (treeet)" โดยไม่ต้องระบุตัวเปรียบเทียบ
1. ตัวเปรียบเทียบและเปรียบเทียบได้เหมือนกัน
พวกเขาทั้งหมดเป็นอินเทอร์เฟซ Java และใช้เพื่อเปรียบเทียบขนาดของคลาสที่กำหนดเอง
คลาสที่กำหนดเองคืออะไร: เช่นบุคคลระดับสาธารณะ {ชื่อสตริง; อายุ int}
เมื่อเรามีรายการบุคคลดังกล่าวซึ่งมี person1, person2, person3 ...... เราใช้ collections.sort (รายการบุคคล),
ผลลัพธ์ที่คาดหวังไม่ได้รับ บางคนต้องถามในเวลานี้ทำไมเราสามารถจัดเรียงรายการสตริง:
ตัวอย่างเช่น StringList {"hello1", "hello3", "hello2"}, collections.sort (stringlist) สามารถได้รับการเรียงลำดับที่ถูกต้องนั่นเป็นเพราะ
วัตถุสตริงช่วยให้เราใช้อินเทอร์เฟซที่เปรียบเทียบได้ดังนั้นหากบุคคลของเราต้องการเรียงลำดับเราก็ต้องใช้เครื่องเปรียบเทียบ
2. ความแตกต่างระหว่างตัวเปรียบเทียบและเปรียบเทียบได้
เทียบเคียงได้
เปรียบเทียบได้ภายในชั้นเรียนบุคคล:
Persion ระดับสาธารณะใช้ {.. เปรียบเทียบขนาดของบุคคล ... },
เนื่องจากตัวเปรียบเทียบได้ถูกนำไปใช้แล้วบุคคลของเราจึงเป็นวัตถุที่สามารถเปรียบเทียบขนาดได้ ฟังก์ชั่นการเปรียบเทียบนั้นเหมือนกับสตริงและสามารถเปรียบเทียบได้ตลอดเวลาและทุกที่เพราะตอนนี้บุคคลมีขนาดที่แตกต่างกัน collections.sort (PersonList) สามารถรับผลลัพธ์ที่ถูกต้อง
เครื่องเปรียบเทียบ
ตัวเปรียบเทียบถูกกำหนดไว้นอกบุคคล ในเวลานี้โครงสร้างของชั้นเรียนบุคคลของเราไม่จำเป็นต้องเปลี่ยนแปลงการเปลี่ยนแปลงใด ๆ เช่น
บุคคลชั้นเรียนสาธารณะ {ชื่อสตริง; อายุ int}จากนั้นเรากำหนดตัวเปรียบเทียบอื่น:
Publiccomparator ใช้เครื่องเปรียบเทียบ () {.. เปรียบเทียบขนาดของบุคคล ... }, วิธีการเปรียบเทียบขนาดของคนสองคนใน Personcomparator ดังนั้นการใช้วิธีนี้เมื่อเราต้องการจัดเรียงรายการบุคคล
นอกเหนือจากการผ่านรายการบุคคลแล้วเรายังต้องผ่าน Personcomparator เพราะวิธีการเปรียบเทียบขนาดบุคคลนั้นอยู่ใน Personcomparator
ดำเนินการในเช่น:
Collections.sort (PersonList, New Personcomparator ())
3. ตัวอย่างของตัวเปรียบเทียบและเปรียบเทียบได้
เทียบเท่า:
ในการใช้อินเทอร์เฟซที่เปรียบเทียบได้คุณต้องแทนที่วิธีการเปรียบเทียบ ใช้การเปรียบเทียบในวิธีการเปรียบเทียบ:
บุคคลระดับสาธารณะใช้การเปรียบเทียบ {ชื่อสตริง; อายุ int; public int compereto (บุคคลอื่น) {int i = 0; i = name.Compareto (อีกคนหนึ่ง); // การเปรียบเทียบโดยใช้สตริงถ้า (i == 0) {// ถ้าชื่อเหมือนกัน, เปรียบเทียบอายุ, ส่งผลคืนอายุผลตอบแทนอายุ - อีกคนหนึ่ง;} อื่น {return i; // ชื่อแตกต่างกันส่งคืนผลลัพธ์ของการเปรียบเทียบชื่อ}}}ในเวลานี้เราสามารถเรียงลำดับโดยตรงกับคอลเลกชัน sort (รายการบุคคล)
เครื่องเปรียบเทียบ:
การใช้งานตัวเปรียบเทียบต้องใช้วิธีการเปรียบเทียบ:
บุคคลชั้นเรียนสาธารณะ {ชื่อสตริง; อายุ int;} คลาส personcomparator ใช้ตัวเปรียบเทียบ <person> {public int compare (บุคคลหนึ่ง, บุคคลอื่น) {int i = 0; i = one.name.compareto (อีกคนหนึ่ง); // การเปรียบเทียบโดยใช้สตริงถ้า (i == 0) {// ถ้าชื่อเหมือนกัน, เปรียบเทียบอายุ, ส่งคืนผลลัพธ์ของการเปรียบเทียบอายุส่งคืนหนึ่ง - อีกหนึ่ง - อีกหนึ่ง - อีก}} อื่น {return i; // ชื่อแตกต่างกันส่งคืนผลลัพธ์ของการเปรียบเทียบชื่อ}}} collections.sort (PersonList, New Personcomparator ()) สามารถจัดเรียงได้4: สรุป
ทั้งสองวิธีมีข้อดีและข้อเสียของตนเอง ใช้งานง่าย ตราบใดที่วัตถุที่ใช้อินเทอร์เฟซที่เปรียบเทียบได้จะกลายเป็นวัตถุที่เปรียบเทียบได้
อย่างไรก็ตามจำเป็นต้องแก้ไขซอร์สโค้ด ข้อได้เปรียบของการใช้เครื่องเปรียบเทียบคือไม่จำเป็นต้องปรับเปลี่ยนซอร์สโค้ด แต่ยังใช้เครื่องเปรียบเทียบ เมื่อจำเป็นต้องเปรียบเทียบวัตถุที่กำหนดเองตัวเปรียบเทียบและวัตถุสามารถผ่านเข้าด้วยกันเพื่อเปรียบเทียบขนาด ในตัวเปรียบเทียบผู้ใช้สามารถใช้ตรรกะที่ซับซ้อนและทั่วไปได้ด้วยตนเองเพื่อให้พวกเขาสามารถจับคู่วัตถุที่ค่อนข้างง่ายซึ่งสามารถประหยัดแรงงานซ้ำ ๆ ได้