array.sort (t [], comparator <? super t> c) วิธีใช้ในการเรียงลำดับอาร์เรย์วัตถุตามกฎที่ผู้ใช้กำหนด
เอกสาร Java อย่างเป็นทางการจะอธิบายถึงบทบาทของวิธีนี้โดยย่อเท่านั้นและไม่แนะนำรายละเอียด บทความนี้จะวิเคราะห์วิธีนี้ในเชิงลึก
1. ตัวอย่างง่ายๆ
การใช้วิธีการเรียงลำดับนั้นง่ายและชัดเจนมาก ในตัวอย่างต่อไปนี้ให้กำหนดตัวเปรียบเทียบที่เปรียบเทียบขนาดสุนัขจากนั้นส่งผ่านวัตถุอินสแตนซ์เป็นพารามิเตอร์ไปยังวิธีการเรียงลำดับ จากตัวอย่างนี้คุณควรจะสามารถใช้การใช้อาร์เรย์ได้อย่างรวดเร็ว ()
นำเข้า java.util.Arrays; นำเข้า Java.util.Comparator; Dog Class {ขนาด int; สุนัขสาธารณะ (int s) {size = s;}} คลาส dognizeComparator ใช้เครื่องเปรียบเทียบ <og> {@override public compare (Dog O1, Dog O2) args) {dog d1 = สุนัขตัวใหม่ (2); Dog D2 = สุนัขตัวใหม่ (1); Dog D3 = สุนัขตัวใหม่ (3); Dog [] Dogarray = {D1, D2, D3}; printdogs (dogarray); array.sort (dogarray D: Dogs) System.out.print (d.size + ""); system.out.println ();}}ผลลัพธ์คือ:
2 1 3 1 2 3
2. ใช้โหมดนโยบาย
นี่เป็นตัวอย่างที่สมบูรณ์แบบและรัดกุมของรูปแบบกลยุทธ์ เป็นเรื่องที่ควรค่าแก่การกล่าวถึงว่าทำไมรูปแบบกลยุทธ์จึงเหมาะสำหรับใช้ในสถานการณ์นี้
โดยทั่วไปรูปแบบนโยบายอนุญาตให้เลือกอัลกอริทึมที่แตกต่างกันเมื่อมีการดำเนินการโปรแกรม ตัวอย่างเช่นเมื่อมีการเรียงลำดับตัวเปรียบเทียบที่แตกต่างกันจะถูกส่งผ่านและใช้อัลกอริทึมที่แตกต่างกัน
ตามตัวอย่างข้างต้นสมมติว่าคุณต้องการจัดเรียงตามน้ำหนักของสุนัขคุณสามารถสร้างตัวเปรียบเทียบใหม่เพื่อจัดเรียงดังนี้:
สุนัขชั้นเรียน {ขนาด int; int น้ำหนัก; สุนัขสาธารณะ (int s, int w) {size = s; weight = w;}} คลาส dogsizeComparator ใช้ตัวเปรียบเทียบ <og> {@@override int Compare (Dog O1, Dog O2) {return o1.size - o2.size; O2) {return o1.weight - o2.weight;}} คลาสสาธารณะ Arraysort {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {dog d1 = สุนัขตัวใหม่ (2, 50); DOG D2 = สุนัขใหม่ (1, 30); DOG D3 = สุนัขใหม่ (3, 40); DOGARAY = {D1, D2 d3}; printdogs (dogarray); arrays.sort (dogarray, dogsizeComparator ()); printdogs (dogarray); arrays.sort (dogarray, dogweightcomparator ใหม่ (); printdogs (dogarray); System.out.print ("size =" + d.size + "weight =" + d.weight + ""); system.out.println ();}}ผลการดำเนินการ:
ขนาด = 2 น้ำหนัก = 50 ขนาด = 1 น้ำหนัก = 30 ขนาด = 3 น้ำหนัก = 40 ขนาด = 1 น้ำหนัก = 30 ขนาด = 2 น้ำหนัก = 50 ขนาด = 3 น้ำหนัก = 40 ขนาด = 1 น้ำหนัก = 30 ขนาด = 3 น้ำหนัก = 40 ขนาด = 2 น้ำหนัก = 50
ตัวเปรียบเทียบเป็นอินเทอร์เฟซดังนั้นวิธีการเรียงลำดับสามารถผ่านในคลาสใดก็ได้ที่ใช้อินเทอร์เฟซนี้ซึ่งเป็นแนวคิดหลักของรูปแบบนโยบาย
3. ทำไมต้องใช้ "super"
มันง่ายที่จะเข้าใจถ้าคุณใช้ "comparator <t> c" แต่ <? supert> ในพารามิเตอร์ที่สองของการเรียงลำดับหมายความว่าประเภทที่ยอมรับโดยตัวเปรียบเทียบสามารถเป็น t หรือ superclass ของมัน ทำไมถึงเป็นซูเปอร์คลาส? คำตอบคือ: สิ่งนี้ช่วยให้การเปรียบเทียบวัตถุคลาสย่อยที่แตกต่างกันโดยใช้ตัวเปรียบเทียบเดียวกัน นี่แสดงให้เห็นอย่างชัดเจนในตัวอย่างต่อไปนี้:
นำเข้า java.util.Arrays; นำเข้า java.util.comparator; สัตว์ชั้น {ขนาด int;} สุนัขชั้นเรียนขยายสัตว์ {สุนัขสาธารณะ (int s) {size = s;}} แมวคลาสขยายสัตว์ {แมวสาธารณะ (int s) {size = s; o1.size - o2.size;} // ด้วยวิธีนี้คลาสย่อยทั้งหมดของสัตว์สามารถใช้ตัวเปรียบเทียบนี้} คลาสสาธารณะ Arraysort {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {dog d1 = สุนัขใหม่ (2); dog d2 = สุนัขตัวใหม่ (1); dog d3 = สุนัขใหม่ (3); d3}; printdogs (dogarray); array.sort (dogarray, สัตว์ใหม่ Zomparator ()); printdogs (dogarray); system.out.println (); // เมื่อคุณมีอาร์เรย์ของแมวตัวเปรียบเทียบเดียวกันสามารถใช้ CAT C1 = แมวใหม่ (2); CAT C2 = แมวตัวใหม่ (1); CAT C3 = แมวตัวใหม่ (3); cat [] catarray = {c1, c2, c3}; printdogs (catarray); array.sort (catarray, สัตว์ใหม่ System.out.print ("size =" + a.size + ""); system.out.println ();}}ผลลัพธ์ผลลัพธ์:
size = 2 size = 1 size = 3 size = 1 size = 2 size = 3 size = 3 size = 2 size = 1 size = 3 size = 1 size = 2 size = 3
4. สรุป
ข้อมูลที่เกี่ยวข้องกับ array.sort () สรุปดังนี้:
ทั่วไป: รูปแบบการออกแบบกลยุทธ์ระดับซูเปอร์คลาส;
การเรียงลำดับ: ความซับซ้อนของเวลา n*log (n);
java.util.collections#sort (รายการ <t> รายการ, comparator <? super t> c) ใช้แนวคิดที่คล้ายกันกับ array.sort
สรุป
ข้างต้นเป็นคำอธิบายโดยละเอียดทั้งหมดของรหัส Array.sort () ใน Java ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องกับ Java ในเว็บไซต์นี้ หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!