คำถามนี้แนะนำวิธีการเรียงลำดับ () สองวิธีของคลาสเครื่องมือคอลเลกชันดังต่อไปนี้:
1. วิธีการสองประเภท () ของคลาสเครื่องมือคอลเลกชัน
รูปแบบที่ 1: สาธารณะคงที่ <t ขยายเทียบกับ <? Super T >> Void Sort (รายการ <t> รายการ)
หมายเหตุ: ทั่วไป <t> ในวิธีนี้เป็นคลาสย่อยทั้งหมดของอินเตอร์เฟสที่เปรียบเทียบได้นั่นคือข้อมูลของประเภท subclass ที่เปรียบเทียบได้เท่านั้นที่สามารถเปรียบเทียบและเรียงลำดับได้ หากมีการเปรียบเทียบและจัดเรียงข้อมูลประเภทอื่น ๆ อินเตอร์เฟสที่เปรียบเทียบได้จะต้องสืบทอดและ
วิธีการแทนที่เท่ากับ () และวิธีการเปรียบเทียบ () ในหมู่พวกเขาคลาสสตริงและคลาสจำนวนเต็มเป็นทั้งคลาสย่อยอินเตอร์เฟสที่เปรียบเทียบได้และสามารถเรียงลำดับได้ในขณะที่ประเภทพื้นฐานไม่สามารถจัดเรียงได้ รายการเปรียบเทียบมีการระบุภายในชั้นเรียน
รูปแบบที่ 2: สาธารณะคงที่ <t> การเรียงลำดับเป็นโมฆะ (รายการ <t> รายการ, comparator <? super t> c)
หมายเหตุ: วิธีนี้ระบุวิธีการเปรียบเทียบวิธีการเปรียบเทียบ <? Super t> c นั่นคือ C ต้องใช้ตัวเปรียบเทียบ <? อินเทอร์เฟซ Super T>, แทนที่เมธอด compereto () เพื่อระบุรายการเปรียบเทียบ มีการระบุรายการเปรียบเทียบนอกชั้นเรียนซึ่งมีความยืดหยุ่นมากขึ้น
2. ตัวอย่าง
วิธีทั่วไปในการรับสตริงและตัวเลขในตัวอย่าง:
/ *** สร้างสตริงแบบสุ่มและไม่ใช่ซ้ำ: หมายเลขสร้างจำนวนสตริง*/ รายการคงที่สาธารณะ <String> GenerAtestring (หมายเลข int) {list <String> listString = new ArrayList <> (); // ใช้เพื่อจัดเก็บรายการค่าส่งคืน <จำนวนเต็ม> length = null; // ความยาวสตริงสตริงบัฟเฟอร์ sb = new StringBuffer (); // ตัวแปร int ตัวแปรระดับกลาง = 0; // สตริงหมายเลขควบคุม [] chars = สตริงใหม่ [] {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m," n "," "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "f", "," "s", "t", "u", "v", "w", "x", "y", "z"}; ในขณะที่ (จริง) {// สิ้นสุดการควบคุมถ้า (ควบคุม == number) {break; } // สร้างหมายเลขสุ่มและสร้าง 36- บิต 2AAAB761-4341-4968-ACEB-3861EE3824B2 uuid ประเภทสตริงข้อมูล uuid = uuid.randomuiD () ToString () แทนที่ ("-", ""); sb.setLength (0); // รับความยาวของสตริงสุ่มความยาวไม่ได้ 0 ทำ {length = getDiffno (1, 11); } ในขณะที่ (length.get (0) == 0); // แพทช์ร่วมกันสตริงสำหรับ (int i = 0; i <length.get (0); i ++) {string str = uuid.substring (i*3, (i*3+3)); // แปลงสตริง str เป็น hexadecimal และรับค่า int x = integer.parseint (str, 16); // รับส่วนที่เหลือ: x % 0x3e-0x3e = 3*16 + 14 = 62 โดยที่ตัวอักษรมี 62 อักขระ sb.append (chars [x % 0x3e]); } listString.add (sb.toString ()); ควบคุม ++; } return listString; }/ *** สร้างตัวเลขแบบสุ่มและไม่ซ้ำกัน: n สร้างตัวเลขสูงสุดสร้างช่วง*/ รายการคงที่สาธารณะ <จำนวนเต็ม> getDiffno (int n, int max) {// สร้าง [0-N] ตัวเลขสุ่มที่ไม่ได้ทำการพิมพ์ซ้ำ // รายการที่ใช้เพื่อบันทึกรายการหมายเลขสุ่มเหล่านี้ สุ่มสุ่ม = ใหม่สุ่ม (); จำนวนเต็ม k; สำหรับ (int i = 0; i <n; i ++) {do {k = random.nextint (สูงสุด); } ในขณะที่ (list.contains (k)); list.add (k); } return list; - 1. เรียงลำดับรายการของผู้แทนจำนวนเต็ม
/*** 1. เรียงลำดับรายการของยาสามัญจำนวนเต็มผ่านวิธีคอลเลกชัน SORT (); * สร้างรายการของยาชื่อสามัญจำนวนเต็มแทรกเมธอดสิบตัวที่ไม่ซ้ำกันซ้ำภายใน 100 และเรียกวิธีการรวบรวม () วิธีการเรียงลำดับ* 2. กฎการเรียงลำดับ: หมายเลขแรกจากนั้นตัวอักษรตัวเลข 0-9 ลำดับของตัวอักษร az*/ void listintegersort () 100); System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ System.out.println ("องค์ประกอบ:" + จำนวนเต็ม);} collections.sort (จำนวนเต็ม); System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 2. เรียงลำดับรายการของสตริงยาชื่อสามัญ
/*** 1. เรียงลำดับรายการของสตริงทั่วไป; สร้างรายการของสตริงทั่วไปเพิ่มองค์ประกอบสตริงที่ไม่ได้สั่งซื้อ * เรียกวิธีการเรียงลำดับและส่งออกลำดับการเรียงลำดับอีกครั้ง */ public void listStringSort () {list <String> stringList = new ArrayList <String> (); StringList.add ("eipjlcx"); StringList.add ("WVQRUFC"); StringList.add ("J"); StringList.add ("HDAU2G"); StringList.add ("M0WSWHD3"); System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - / *** เรียงลำดับรายการของสตริงทั่วไปซึ่งต้องการการสร้างแบบสุ่มของ 10 สตริงที่ไม่ซ้ำกันซ้ำและความยาวของสตริงอยู่ภายใน 10*/ โมฆะสาธารณะ listStringRandomSort () {// สร้างรายการสตริงสุ่ม <string> listString = generatestring (10); System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- System.out.println ("-------------------------------------------------");3. รายการประเภทของยาชื่อสามัญอื่น ๆ
การดำเนินการในชั้นเรียนหลักสูตร
/** * คลาสหลักสูตร * @Author Administrator * */หลักสูตรระดับสาธารณะ {รหัสสาธารณะสาธารณะ; ชื่อสตริงสาธารณะ; หลักสูตรสาธารณะ (รหัสสตริง, ชื่อสตริง) {this.id = id; this.name = ชื่อ; } หลักสูตรสาธารณะ () {} @Override public int hashCode () {สุดท้าย int prime = 31; int ผลลัพธ์ = 1; result = prime * result + ((name == null)? 0: name.hashCode ()); ผลการกลับมา; } @Override บูลีนสาธารณะเท่ากับ (Object obj) {ถ้า (this == obj) คืนค่าจริง; ถ้า (obj == null) ส่งคืนเท็จ; if (! (OBJ Instance ของหลักสูตร)) กลับเท็จ; หลักสูตรอื่น = (หลักสูตร) obj; if (name == null) {ถ้า (อื่น ๆ name! = null) return false; } อื่นถ้า (! name.equals (อื่น ๆ . name)) ส่งคืน false; กลับมาจริง; - ชั้นเรียนนักเรียนใช้อินเทอร์เฟซที่เปรียบเทียบได้และตั้งค่ารายการเปรียบเทียบภายในชั้นเรียน
นำเข้า java.util.hashset; นำเข้า java.util.set;/** * ชั้นเรียนนักเรียน * @author administrator * */นักเรียนชั้นเรียนสาธารณะใช้การเปรียบเทียบ <student> {รหัสสตริงสาธารณะ; ชื่อสตริงสาธารณะ; Public Set <Sourse> หลักสูตร; นักเรียนสาธารณะ (รหัสสตริงชื่อสตริง) {this.id = id; this.name = ชื่อ; this.courses = hashset ใหม่ <Sourse> (); } @Override สาธารณะ int hashCode () {สุดท้าย int prime = 31; int ผลลัพธ์ = 1; result = prime * result + ((name == null)? 0: name.hashCode ()); ผลการกลับมา; } @Override บูลีนสาธารณะเท่ากับ (Object obj) {ถ้า (this == obj) คืนค่าจริง; ถ้า (obj == null) ส่งคืนเท็จ; if (! (OBJ Instance ของนักเรียน)) กลับเท็จ นักเรียนอื่น ๆ = (นักเรียน) OBJ; if (name == null) {ถ้า (อื่น ๆ name! = null) return false; } อื่นถ้า (! name.equals (อื่น ๆ . name)) ส่งคืน false; กลับมาจริง; } @Override Public Int Compareto (นักเรียน o) {// set id เป็นรายการเปรียบเทียบ // วิธีการที่สร้างขึ้นอัตโนมัติ todo stub return this.id.compareto (o.id); - ใช้อินเทอร์เฟซเปรียบเทียบและตั้งค่ารายการเปรียบเทียบนอกชั้นเรียน
นำเข้า Java.util.Comparator; Public Class StudentComparator ใช้ตัวเปรียบเทียบ <Tudent> {@Override int เปรียบเทียบ (นักเรียน O1, นักเรียน O2) {// วิธีการที่สร้างอัตโนมัติแบบอัตโนมัติ - เปรียบเทียบชั้นเรียนนักเรียน
/*** เรียงลำดับรายการของยาสามัญประเภทอื่น ๆ โดยนำนักเรียนเป็นตัวอย่าง */ โมฆะสาธารณะ ListComparatorsort () {รายการ <student> StudentList = New ArrayList <Tudent> (); รายการ <จำนวนเต็ม> list = getDiffNo (4, 1,000); StudentList.Add (นักเรียนใหม่ (list.get (0) + "", "Mike")); StudentList.add (นักเรียนใหม่ (list.get (1) + "", "Angela")); StudentList.add (นักเรียนใหม่ (list.get (2) + "", "Lucy")); StudentList.Add (นักเรียนใหม่ (1,000 + "", "Beyonce")); System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - System.out.println ("นักเรียน:" + student.id + ":" + student.name);} // ใช้อินเทอร์เฟซตัวเปรียบเทียบ <t> ตั้งค่าวิธีการเปรียบเทียบที่เฉพาะเจาะจงเรียงลำดับโดยการเปรียบเทียบชื่อคอลเลกชัน System.out.println ("----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น