บทความนี้อธิบายวิธีการใช้งานสองวิธีสำหรับการเรียงลำดับที่กำหนดเอง Java สำหรับ ArrayList แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
การใช้การเรียงลำดับรายการแบบกำหนดเองใน Java ส่วนใหญ่ใช้สองวิธี
1) ให้คลาสของวัตถุที่จำเป็นต้องจัดเรียงใช้อินเทอร์เฟซที่เปรียบเทียบได้แทนที่วิธีการเปรียบเทียบ (ถึง) และกำหนดกฎการเรียงลำดับในนั้น จากนั้นคุณสามารถเรียกคอลเลกชันโดยตรง sort () เพื่อเรียงลำดับอาร์เรย์วัตถุ
นักเรียนชั้นเรียนสาธารณะใช้ {ID INT ส่วนตัว; อายุ int ส่วนตัว; ความสูง int ส่วนตัว; ชื่อสตริงส่วนตัว; นักเรียนสาธารณะ (ID int, ชื่อสตริง, อายุ int, ความสูง int) {this.id = id; this.name = ชื่อ; this.age = อายุ; this.height = ความสูง; } สาธารณะ int getId () {return id; } public int getage () {return Age; } public int getheight () {return height; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setId (int id) {this.id = id; } การตั้งค่าโมฆะสาธารณะ (อายุ int) {this.age = อายุ; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } โมฆะสาธารณะ setheight (ความสูง int) {this.height = ความสูง; } @Override Public Int ComparEto (Object O) {Student S = (นักเรียน) o; if (this.age> s.age) {return 1; } อื่นถ้า (this.age <s.age) {return -1; } else {ถ้า (this.height> = s.Height) {return 1; } else {return -1; -คลาสทดสอบ:
นำเข้า java.util.*; การทดสอบชั้นเรียนสาธารณะ {โมฆะคงที่สาธารณะ printdata (รายการ <student> รายการ) {สำหรับ (นักเรียนนักเรียน: รายการ) {system.out.println ("หมายเลขนักเรียน:" + student.getId () + "ชื่อ:" นักเรียน. getName () + "อายุ" }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {รายการ <student> list = new ArrayList <> (); list.add (นักเรียนใหม่ (1, "a", 20, 180)); list.add (นักเรียนใหม่ (2, "b", 21, 175)); list.add (นักเรียนใหม่ (3, "c", 22, 190)); list.add (นักเรียนใหม่ (4, "D", 21, 170)); list.add (นักเรียนใหม่ (5, "e", 20, 185)); System.out.println ("ก่อนจัดเรียง"); printdata (รายการ); collections.sort (รายการ); System.out.println ("หลังอายุและความสูงเรียงลำดับ"); printdata (รายการ); -ผลลัพธ์:
ก่อนที่จะจัดเรียงหมายเลขนักเรียน: 1 ชื่อ: A อายุ 20 ความสูง: 180 หมายเลขนักเรียน: 2 ชื่อ: B อายุ 21 ความสูง: 175 หมายเลขนักเรียน: 3 ชื่อ: C อายุ 22 ความสูง: 190 หมายเลขนักเรียน: 4 ชื่อ: อายุ 21 ความสูง: 170 นักเรียนหมายเลข: 5 ชื่อ: อายุ 20 ปี: 185 อายุ 185 ปี ชื่อ: B อายุ 21 ความสูง: 175 นักเรียนหมายเลข: 3 ชื่อ: C อายุ 22 ความสูง: 190
2) ใช้ตัวเปรียบเทียบอินเทอร์เฟซเปรียบเทียบใหม่เขียนวิธีการเปรียบเทียบและส่งผ่านไปยังการเรียงลำดับเป็นพารามิเตอร์
นักศึกษาชั้นเรียนสาธารณะ {ID INT ส่วนตัว; อายุ int ส่วนตัว; ความสูง int ส่วนตัว; ชื่อสตริงส่วนตัว; นักเรียนสาธารณะ (ID int, ชื่อสตริง, อายุ int, ความสูง int) {this.id = id; this.name = ชื่อ; this.age = อายุ; this.height = ความสูง; } สาธารณะ int getId () {return id; } public int getage () {return Age; } public int getheight () {return height; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setId (int id) {this.id = id; } การตั้งค่าโมฆะสาธารณะ (อายุ int) {this.age = อายุ; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } โมฆะสาธารณะ setheight (ความสูง int) {this.height = ความสูง; -คลาสทดสอบ:
นำเข้า java.util.*; การทดสอบชั้นเรียนสาธารณะ {โมฆะคงที่สาธารณะ printdata (รายการ <student> รายการ) {สำหรับ (นักเรียนนักเรียน: รายการ) {system.out.println ("หมายเลขนักเรียน:" + student.getId () + "ชื่อ:" นักเรียน. getName () + "อายุ" }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {รายการ <student> list = new ArrayList <> (); list.add (นักเรียนใหม่ (1, "a", 20, 180)); list.add (นักเรียนใหม่ (2, "b", 21, 175)); list.add (นักเรียนใหม่ (3, "c", 22, 190)); list.add (นักเรียนใหม่ (4, "D", 21, 170)); list.add (นักเรียนใหม่ (5, "e", 20, 185)); System.out.println ("ก่อนจัดเรียง"); printdata (รายการ); collections.sort (รายการ, ตัวเปรียบเทียบใหม่ <student> () {@Override สาธารณะ int เปรียบเทียบ (นักเรียน o1, นักเรียน o2) {ถ้า (o1.getage ()> = o2.getage ()) {return 1;} else {return -1;}}}); System.out.println ("After Age เรียงลำดับ"); printdata (รายการ); collections.sort (รายการ, ตัวเปรียบเทียบใหม่ <student> () {@Override สาธารณะ int เปรียบเทียบ (นักเรียน o1, นักเรียน o2) {ถ้า (o1.getage ()> o2.getage ()) {return 1;} อื่นถ้า (o1.getage () <o2.getage ()) {return -1; 1;} อื่น {return -1; System.out.println ("หลังอายุและความสูงเรียงลำดับ"); printdata (รายการ); -ผลลัพธ์ผลลัพธ์:
ก่อนที่จะจัดเรียงหมายเลขนักเรียน: 1 ชื่อ: A อายุ 20 ความสูง: 180 หมายเลขนักเรียน: 2 ชื่อ: B อายุ 21 ความสูง: 175 หมายเลขนักเรียน: 3 ชื่อ: C อายุ 22 ความสูง: 190 หมายเลขนักเรียน: 4 ชื่อ: อายุ 21 ความสูง: 170 นักเรียนหมายเลข: 5 ชื่อ: อายุ 20 ปี: 185 อายุ 21 ความสูง: 170 หมายเลขนักเรียน: 3 ชื่อ: C อายุ 22 ความสูง: 190 หลังอายุและความสูงเรียงลำดับหมายเลขนักเรียน: 1 ชื่อ: อายุ 20 ความสูง: 180 หมายเลขนักเรียน: 5 ชื่อ: E อายุ 20 ความสูง: 185 หมายเลขนักเรียน: 4 ชื่อ: อายุ 21 สูง: 170 หมายเลขนักเรียน: 2 ชื่อ: B อายุ 21 สูง: 175 หมายเลขนักเรียน: 3 ชื่อ: C อายุ 22 ปี
จากตัวอย่างข้างต้นเราจะเห็นว่าการเรียงลำดับมีความเสถียร ฉันดูที่ซอร์สโค้ดของ Collections.sort java มันถูกนำไปใช้ตามการเรียงลำดับและการเรียงลำดับที่เสถียร นอกจากนี้ยังได้รับการปรับให้เหมาะสมภายในเรียกว่า Timsort (สำหรับ Timsort โปรดดูที่ https://baike.baidu.com/item/timsort?fr=aladdin)
PS: นี่คือเครื่องมือสาธิตสำหรับการอ้างอิงของคุณ:
การสาธิตแอนิเมชั่นออนไลน์แทรก/เลือก/ฟอง/ผสาน/ฮิลล์/อัลกอริทึมการเรียงลำดับอย่างรวดเร็วเครื่องมือกระบวนการ:
http://tools.vevb.com/aideddesign/paixu_ys
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริทึม Java ผู้อ่านที่มีความสนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "โครงสร้างข้อมูล Java และการสอนอัลกอริทึม", "บทสรุปของเคล็ดลับการดำเนินงาน Java Dom", "บทสรุปของไฟล์ Java และเคล็ดลับการดำเนินการไดเรกทอรี" และ "สรุป
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน