Comparator Interface ใน Java พร้อมตัวอย่างคืออะไร
อินเทอร์เฟซ Comparator ประกอบด้วยวิธีการเปรียบเทียบ () และเท่ากับ () วิธีแรกใช้ในการคำนวณวัตถุสองชิ้นโดยส่งคืนค่าจำนวนเต็ม อีกวิธีหนึ่งใช้สำหรับคำนวณวัตถุเปรียบเทียบสองตัวเพื่อความเท่าเทียมกัน
ต่อไปนี้คือตัวอย่างต่างๆ ของวิธีใช้อินเทอร์เฟซ Comparator ใน Java:
ตัวอย่างที่ 1: เรียงลำดับรายการตามความยาว
ในตัวอย่างนี้ รายการของสตริงได้รับการพิจารณาและจัดเรียงตามความยาวของสตริง แทนที่จะเรียงลำดับตามตัวอักษร:
นำเข้า java.util.ArrayList ;
นำเข้า java.util.Collections ;
นำเข้า java.util.Comparator ;
นำเข้า java.util.List ;
สาธารณะ ระดับ หลัก {
สาธารณะ คงที่ เป็นโมฆะ หลัก ( สตริง [ ] หาเรื่อง ) {
รายการ < สตริง > รายการ = ใหม่ รายการอาร์เรย์ <> ( ) ;
รายการ. เพิ่ม ( 'จอห์น' ) ;
รายการ. เพิ่ม ( 'บ๊อบ' ) ;
รายการ. เพิ่ม ( 'อลิซ' ) ;
คอลเลกชัน . เรียงลำดับ ( รายการ ) ;
ระบบ . ออก . พิมพ์ ( รายการ ) ;
คอลเลกชัน . เรียงลำดับ ( รายการ, ใหม่ ตัวเปรียบเทียบความยาวสตริง ( ) ) ;
ระบบ . ออก . พิมพ์ ( รายการ ) ;
}
} // มีการกำหนดคลาส
ระดับ ตัวเปรียบเทียบความยาวสตริง ดำเนินการ เครื่องเปรียบเทียบ < สตริง > {
สาธารณะ นานาชาติ เปรียบเทียบ ( สตริง s1, สตริง เอส2 ) {
กลับ จำนวนเต็ม . เปรียบเทียบ ( s1. ความยาว ( ) , s2. ความยาว ( ) ) ;
}
}
คำอธิบายของรหัสด้านบนได้รับด้านล่าง:
- ขั้นแรก สร้างคลาส Comparator แบบกำหนดเองที่เรียกว่า StringLengthComparator ที่ใช้อินเทอร์เฟซ Comparator
- มันแทนที่วิธีการเปรียบเทียบ () สำหรับการเปรียบเทียบความยาวของสองสตริง
- ในตอนท้าย ส่งอินสแตนซ์ไปยังเมธอด the.sort() เพื่อจัดเรียงรายการโดยใช้ตัวเปรียบเทียบที่กำหนดเองของเรา
เอาต์พุต
เอาต์พุตแรกคือผลลัพธ์ของการจัดเรียงรายการโดยใช้การเรียงลำดับตามธรรมชาติ ในขณะที่เอาต์พุตที่สองคือผลลัพธ์ของการจัดเรียงรายการโดยใช้ตัวเปรียบเทียบที่กำหนดเองของเราตามความยาวของแต่ละสตริง
ตัวอย่างที่ 2: การเรียงลำดับวัตถุตามฟิลด์ที่ระบุ
อีกตัวอย่างหนึ่งดำเนินการเพื่อจัดเรียงวัตถุตามเขตข้อมูลเฉพาะ อินเทอร์เฟซ Comparator ใช้เพื่อบรรลุสิ่งนี้:
นำเข้า java.util.ArrayList ;นำเข้า java.util.Collections ;
นำเข้า java.util.Comparator ;
นำเข้า java.util.List ;
สาธารณะ ระดับ หลัก {
สาธารณะ คงที่ เป็นโมฆะ หลัก ( สตริง [ ] หาเรื่อง ) {
รายการ < บุคคล > คน = ใหม่ รายการอาร์เรย์ <> ( ) ; // กำหนดชื่อ อายุ และเงินเดือน
คน เพิ่ม ( ใหม่ บุคคล ( 'อลิซ' , 25 , 50000 ) ) ;
คน เพิ่ม ( ใหม่ บุคคล ( 'บ๊อบ' , 30 , 75000 ) ) ;
คน เพิ่ม ( ใหม่ บุคคล ( 'ชาร์ลี' , ยี่สิบ , 40000 ) ) ;
เครื่องเปรียบเทียบ < บุคคล > เครื่องเปรียบเทียบเงินเดือน = ใหม่ เครื่องเปรียบเทียบ < บุคคล > ( ) {
// จัดเรียงบุคคลตามเงินเดือน
สาธารณะ นานาชาติ เปรียบเทียบ ( คน p1 คน p2 ) {
กลับ จำนวนเต็ม . เปรียบเทียบ ( พี 2 รับเงินเดือน ( ) , หน้า 1. รับเงินเดือน ( ) ) ;
}
} ;
คอลเลกชัน . เรียงลำดับ ( คน เงินเดือนเปรียบเทียบ ) ; กลับ เรียงลำดับค่า
// พิมพ์รายชื่อบุคคลที่เรียงลำดับ
สำหรับ ( บุคคล : คน ) {
ระบบ . ออก . พิมพ์ ( บุคคล ) ;
}
}
}
ระดับ บุคคล { // กำหนดชื่อ อายุ และเงินเดือน
ส่วนตัว สตริง ชื่อ ; // ขอบเขตภายในคลาส
ส่วนตัว นานาชาติ อายุ ;
ส่วนตัว นานาชาติ เงินเดือน ;
สาธารณะ บุคคล ( สตริง ชื่อ, นานาชาติ อายุ, นานาชาติ เงินเดือน ) {
นี้ . ชื่อ = ชื่อ ;
นี้ . อายุ = อายุ ;
นี้ . เงินเดือน = เงินเดือน ;
}
สาธารณะ สตริง รับชื่อ ( ) {
กลับ ชื่อ ;
}
สาธารณะ นานาชาติ รับอายุ ( ) {
กลับ อายุ ;
}
สาธารณะ นานาชาติ รับเงินเดือน ( ) {
กลับ เงินเดือน ;
}
สาธารณะ สตริง toString ( ) {
กลับ ชื่อ + ' (อายุ ' + อายุ + ', เงินเดือน $' + เงินเดือน + ')' ;
}
}
คำอธิบายของรหัสได้รับด้านล่าง:
- คลาสที่เรียกว่า “ บุคคล ” มีสามช่อง: “ ชื่อ ”, “ อายุ ', และ ' เงินเดือน ' เป็นที่ยอมรับว่า.
- หลังจากนั้น ให้จัดเรียงคอลเลกชันของวัตถุบุคคลโดยขึ้นอยู่กับเงินเดือนจากมากไปน้อย
เอาต์พุต
ผลลัพธ์แสดงให้เห็นว่ามีการจัดเรียงเงินเดือนตามลำดับจากมากไปน้อย
บทสรุป
ใน Java อินเทอร์เฟซ Comparator เป็นเครื่องมือที่มีประสิทธิภาพที่ช่วยให้ผู้ใช้สามารถจัดเรียงวัตถุตามเกณฑ์ที่กำหนดเอง มันแทนที่เมธอดของการเปรียบเทียบ () ผู้ใช้สามารถกำหนดฟังก์ชันการเปรียบเทียบของตนเองและใช้เพื่อจัดเรียงคอลเล็กชันของอ็อบเจกต์ได้หลายวิธี บทความนี้ได้อธิบายอินเทอร์เฟซตัวเปรียบเทียบพร้อมกับตัวอย่างที่ใช้งานได้จริงใน Java