เมื่อคอลเลกชันหรืออาร์เรย์ที่ต้องจัดเรียงไม่ใช่ประเภทตัวเลขที่ง่ายคุณสามารถใช้ตัวเปรียบเทียบหรือเทียบเท่ากับการใช้การเรียงลำดับวัตถุหรือการเรียงลำดับแบบกำหนดเองในวิธีง่ายๆ
ฟังก์ชั่นการเปรียบเทียบซึ่งกำหนดให้มีการสั่งซื้อทั้งหมดในการรวบรวมวัตถุบางอย่าง ตัวเปรียบเทียบสามารถส่งผ่านไปยังวิธีการเรียงลำดับ (เช่น collections.sort หรือ arrays.sort) เพื่อให้สามารถควบคุมลำดับการเรียงลำดับได้อย่างแม่นยำ ตัวเปรียบเทียบยังสามารถใช้ในการควบคุมลำดับของโครงสร้างข้อมูลบางอย่าง (เช่นชุดที่เรียงลำดับหรือแผนที่เรียงลำดับ) หรือเพื่อจัดลำดับสำหรับคอลเลกชันของวัตถุที่ไม่มีการสั่งซื้อตามธรรมชาติ ------ API
คุณสามารถเรียงลำดับรายการสตริงได้โดยตรงเนื่องจากวัตถุสตริงช่วยให้เราใช้อินเทอร์เฟซที่เปรียบเทียบได้ดังนั้นหากบุคคลของเราต้องการเรียงลำดับเราก็ต้องใช้ตัวเปรียบเทียบ
1. เปรียบเทียบ
เรียงลำดับวัตถุที่เก็บไว้ใน LinkedList
นำเข้า java.util.Comparator; นำเข้า java.util.linkedList; คนชั้นเรียน {ความสูงของลอยตัวส่วนตัว; ชื่อสตริงส่วนตัว; บุคคล (ความสูงลอย) {this.height = ความสูง; } สาธารณะลอย Getheight () {return height; } โมฆะสาธารณะ setheight (ความสูงลอย) {this.height = ความสูง; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; }} คลาส personheight ใช้ตัวเปรียบเทียบ <person> {@Override // เขียนวิธีการเปรียบเทียบกลับ <0 ยังคงไม่เปลี่ยนแปลงกลับ> 0 ถูกแลกเปลี่ยนตามลำดับ } else {return -1; }}} ชั้นเรียนสาธารณะคำถาม 3 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {บุคคล p1 = บุคคลใหม่ (23.4f); P1.SetName ("Stud1"); บุคคล P2 = บุคคลใหม่ (2.34F); P2.SetName ("Stud2"); บุคคล P3 = บุคคลใหม่ (34.32F); p3.setName ("stud3"); บุคคล P4 = บุคคลใหม่ (56.45F); P4.SetName ("Stud4"); บุคคล P5 = บุคคลใหม่ (21.4f); p5.setName ("stud5"); LinkedList <Person> al = ใหม่ LinkedList <Person> (); al.add (P1); al.add (P2); al.add (P3); al.add (P4); al.add (P5); // เรียกวิธีการเรียงลำดับเพื่อใช้การเรียงลำดับคอลเลกชัน SORT (AL, New Personheight ()); // transip output สำหรับ (person p: al) system.out.println (p.getName ()); -
ที่แนบมา:
// เรียงลำดับวันที่/*** หาก O1 น้อยกว่า O2 ให้ส่งคืนจำนวนลบ หาก O1 มากกว่า O2 ให้ส่งกลับจำนวนบวก หากพวกเขาเท่ากันให้กลับมา 0; */@overridepublic int Compare (ขั้นตอน O1, ขั้นตอน O2) {วันที่ยอมรับเวลา 1 = utiltool.strtodate (o1.getaccepttime (), null); วันที่ยอมรับเวลา 2 = utiltool.strtodate (o2.getaccepttime (), null); // จากน้อยไปมากในฟิลด์วันที่หากคุณต้องการลงมาคุณสามารถใช้วิธีการก่อนหน้านี้ได้หาก (AcceptTime1.After (AcceptTime2)) ส่งคืน 1; return -1;}2. เทียบเท่า
นำเข้า java.util.Collections; นำเข้า Java.util.Comparator; นำเข้า Java.util.linkedList; บุคคลในชั้นเรียนใช้การเปรียบเทียบ {ความสูงของลอยตัวส่วนตัว; ชื่อสตริงส่วนตัว; บุคคล (ความสูงลอย) {this.height = ความสูง; } สาธารณะลอย Getheight () {return height; } โมฆะสาธารณะ setheight (ความสูงลอย) {this.height = ความสูง; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } @Override public int compereto (Object O) {// todo วิธีการที่สร้างขึ้นอัตโนมัติ stub ถ้า (this.height> ((บุคคล) o) .Height) {return 1; } return -1; }} ชั้นเรียนสาธารณะคำถาม 3 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {บุคคล p1 = บุคคลใหม่ (23.4f); P1.SetName ("Stud1"); บุคคล P2 = บุคคลใหม่ (2.34F); P2.SetName ("Stud2"); บุคคล P3 = บุคคลใหม่ (34.32F); p3.setName ("stud3"); บุคคล P4 = บุคคลใหม่ (56.45F); P4.SetName ("Stud4"); บุคคล P5 = บุคคลใหม่ (21.4f); p5.setName ("stud5"); LinkedList <Person> al = ใหม่ LinkedList <Person> (); al.add (P1); al.add (P2); al.add (P3); al.add (P4); al.add (P5); collections.sort (al); สำหรับ (บุคคล P: AL) System.out.println (P.GetName ()); -สาม. การเปรียบเทียบ
เปรียบเทียบได้ภายใน ชั้นเรียนบุคคล
ตัวเปรียบเทียบถูกกำหนดไว้นอกบุคคล ในเวลานี้โครงสร้างของชั้นเรียนบุคคลของเราไม่จำเป็นต้องเปลี่ยนแปลง
ทั้งสองวิธีมีข้อดีและข้อเสียของตนเอง ใช้งานง่าย ตราบใดที่วัตถุที่ใช้อินเทอร์เฟซที่เปรียบเทียบได้กลายเป็นวัตถุที่เปรียบเทียบได้ก็ต้องมีการแก้ไขซอร์สโค้ด ข้อดีของการใช้ตัวเปรียบเทียบคือไม่จำเป็นต้องมีการแก้ไขซอร์สโค้ด แต่ใช้ตัวเปรียบเทียบ เมื่อจำเป็นต้องเปรียบเทียบวัตถุที่กำหนดเองคุณสามารถเปรียบเทียบขนาดโดยผ่านตัวเปรียบเทียบและวัตถุเข้าด้วยกัน ในตัวเปรียบเทียบผู้ใช้สามารถใช้ตรรกะที่ซับซ้อนและทั่วไปได้ด้วยตนเองเพื่อให้พวกเขาสามารถจับคู่วัตถุที่ค่อนข้างง่ายซึ่งสามารถประหยัดแรงงานซ้ำ ๆ ได้