عندما لا تكون المجموعة أو المصفوفة التي تحتاج إلى فرز نوعًا بسيطًا ، يمكنك عادة استخدام المقارنة أو المقارنة لتنفيذ فرز الكائنات أو الفرز المخصص بطريقة بسيطة.
وظيفة المقارنة ، التي تفرض ترتيبًا تامًا على بعض الكائنات. يمكن تمرير المقارنات إلى طريقة الفرز (مثل collections.sort أو المصفوفات. يمكن أيضًا استخدام المقارنات للتحكم في ترتيب بعض هياكل البيانات (مثل المجموعات المرتبة أو الخرائط المرتبة) ، أو لتوفير طلب لمجموعات من الكائنات التي لا تحتوي على ترتيب طبيعي. ------ API
يمكنك فرز قائمة السلسلة مباشرة لأن كائن السلسلة ساعدنا في تنفيذ الواجهة المماثلة ، لذلك إذا كان شخصنا يريد الفرز ، نحتاج أيضًا إلى تنفيذ مقارنة.
1. المقارنة
فرز الكائنات المخزنة في LinkedList
استيراد java.util.comparator ؛ استيراد java.util.linkedList ؛ فئة شخص {private float height ؛ اسم السلسلة الخاصة ؛ الشخص (ارتفاع تعويم) {this.height = الارتفاع ؛ } تعويم العام getheight () {عودة الارتفاع ؛ } public void setheight (ارتفاع تعويم) {this.height = الارتفاع ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ }} class personheight تنفذ المقارنة <profern> {Override // أعد كتابة طريقة المقارنة ، والعودة <0 تظل دون تغيير ، يتم تبادل العودة> 0 بالتسلسل (الحفاظ على ترتيب تصاعدي) int public (الشخص e1 ، الشخص e2) {if (e1.getheight () <e2.getheight ()) {return 1 ؛ } آخر {return -1 ؛ }}} الفئة العامة Question3 {public static void main (string [] args) {person p1 = new شخص (23.4f) ؛ p1.setName ("stud1") ؛ الشخص p2 = شخص جديد (2.34F) ؛ p2.setName ("stud2") ؛ الشخص p3 = شخص جديد (34.32f) ؛ p3.setName ("stud3") ؛ profire p4 = شخص جديد (56.45F) ؛ p4.SetName ("stud4") ؛ الشخص p5 = شخص جديد (21.4f) ؛ p5.setName ("stud5") ؛ LinkedList <Person> al = new LinkedList <Person> () ؛ al.add (p1) ؛ al.add (p2) ؛ al.add (p3) ؛ al.add (p4) ؛ al.add (p5) ؛ // استدعاء طريقة الفرز لتنفيذ مجموعة الفرز. // transip المخرج لـ (person p: al) system.out.println (p.getName ()) ؛ }}
مُرفَق:
// فرز التاريخ/*** إذا كان O1 أقل من O2 ، فقم بإرجاع رقم سالب ؛ إذا كان O1 أكبر من O2 ، فأرد رقمًا إيجابيًا ؛ إذا كانت متساوية ، والعودة 0 ؛ */@Outridepublic int Compare (الخطوة O1 ، الخطوة O2) {Date time1 = utiltool.strtodate (o1.getAcceptTime () ، null) ؛ Date accounttime2 = uiltool.strtodate (o2.getAcceptTime () ، null) ؛ // تصعد حقل التاريخ ، إذا كنت ترغب في النزول ، يمكنك استخدام الطريقة السابقة إذا كانت (accesstime1.after (accesstime2)) return 1 ؛ العودة -1 ؛}2. مماثلة
استيراد java.util.collections ؛ استيراد java.util.comparator ؛ استيراد java.util.linkedList ؛ شخص فئة ينفذ قابلة للمقارنة {private float height ؛ اسم السلسلة الخاصة ؛ الشخص (ارتفاع تعويم) {this.height = الارتفاع ؛ } تعويم العام getheight () {عودة الارتفاع ؛ } public void setheight (ارتفاع تعويم) {this.height = الارتفاع ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } Override public int compareto (object o) {// todo method method method method tuto if (this.height> ((person) o) .height) {return 1 ؛ } عودة أخرى -1 ؛ }} الفئة العامة Question3 {public static void main (string [] args) {person p1 = new شخص (23.4f) ؛ p1.setName ("stud1") ؛ الشخص p2 = شخص جديد (2.34F) ؛ p2.setName ("stud2") ؛ الشخص p3 = شخص جديد (34.32f) ؛ p3.setName ("stud3") ؛ profire p4 = شخص جديد (56.45F) ؛ p4.SetName ("stud4") ؛ الشخص p5 = شخص جديد (21.4f) ؛ p5.setName ("stud5") ؛ LinkedList <Person> al = new LinkedList <Person> () ؛ al.add (p1) ؛ al.add (p2) ؛ al.add (p3) ؛ al.add (p4) ؛ al.add (p5) ؛ collections.sort (al) ؛ لـ (person p: al) system.out.println (p.getName ()) ؛ }}ثلاثة. مقارنة
يتم تعريف المقارنة داخل فئة الشخص .
يتم تعريف المقارنة خارج الشخص. في هذا الوقت ، لا يحتاج بنية فئة شخصنا إلى التغيير.
الطريقتين لها مزايا وعيوب. من السهل استخدام قابلة للمقارنة. طالما أن الكائن الذي ينفذ الواجهة المماثلة يصبح كائنًا قابلاً للمقارنة ، فإنه يتطلب تعديل الكود المصدري. ميزة استخدام المقارنة هي أنه لا يتطلب تعديل الكود المصدري ، ولكن تنفيذ المقارنة. عندما تحتاج إلى مقارنة كائن مخصص ، يمكنك مقارنة الحجم عن طريق تمرير المقارنة والكائن معًا. في المقارنة ، يمكن للمستخدمين تطبيق المنطق المعقد والعامة بأنفسهم ، حتى يتمكنوا من مطابقة بعض الكائنات البسيطة نسبيًا ، والتي يمكن أن توفر الكثير من العمل المتكرر.