مقدمة مماثلة
مماثل هو واجهة الفرز.
إذا كان الفصل يطبق الواجهة المماثلة ، فهذا يعني "هذه الفئة تدعم الفرز". نظرًا لأن الفصول التي تنفذ فرز واجهة مماثلة ، على افتراض أن هناك الآن "قائمة قائمة (أو صفيف) من كائنات الفئات التي تنفذ واجهة قابلة للمقارنة" ، يمكن فرز قائمة القائمة (أو الصفيف) بواسطة collections.sort (أو المصفوفات).
بالإضافة إلى ذلك ، يمكن استخدام "كائن الفئة التي تنفذ الواجهة المماثلة" كمفتاح في "الخريطة المطلوبة (مثل treemap)" أو عنصر في "المجموعة المطلوبة (Treeset)" دون تحديد المقارنة.
1. المقارنة والقابلة للمقارنة هي نفسها
كلها واجهات Java ، وتستخدم لمقارنة أحجام الفئات المخصصة.
ما هي فئة مخصصة: مثل شخص الفئة العامة {اسم السلسلة ؛ int age}.
عندما يكون لدينا قائمة شخص ، تحتوي على person1 ، person2 ، person3 ...... ، نستخدم collections.sort (personlist) ،
لم يتم الحصول على النتيجة المتوقعة. يجب أن يسأل شخص ما في هذا الوقت ، لماذا يمكننا فرز قائمة سلسلة:
على سبيل المثال ، يمكن لـ StringList {"Hello1" ، "Hello3" ، "Hello2"} ، Collections.Sort (StringList) الحصول على الفرز الصحيح ، وهذا بسبب
ساعدنا كائن السلسلة في تنفيذ الواجهة المماثلة ، لذلك إذا كان شخصنا يريد الفرز ، فنحن بحاجة أيضًا إلى تنفيذ مقارنة.
2. الفرق بين المقارنة والقابل للمقارنة
مماثلة
يتم تعريف قابلة للمقارنة داخل فئة الشخص:
Public Class Persion يطبق قابلة للمقارنة {.. compare حجم الشخص ...} ،
نظرًا لأن المقارنة قد تم تنفيذها ، فإن شخصنا أصبح الآن كائنًا يمكنه مقارنة الأحجام. وظيفة المقارنة الخاصة بها هي بالضبط نفس السلسلة ، ويمكن مقارنتها في أي وقت وفي أي مكان ، لأن الشخص لديه الآن حجم مختلف. Collections.sort (Personlist) يمكن أن تحصل على النتيجة الصحيحة.
المقارنة
يتم تعريف المقارنة خارج الشخص. في هذا الوقت ، لا يحتاج هيكل فئة شخصنا إلى تغيير أي تغييرات ، مثل
شخص فئة عامة {اسم السلسلة ؛ عمري} ،ثم نحدد مقارنة أخرى:
Public PersonComparator يقوم بتنفيذ المقارنة () {..compare حجم الشخص ...} ، كيفية مقارنة أحجام شخصين في personcomparator. لذا ، باستخدام هذه الطريقة ، عندما نريد فرز قائمة الشخصيات ،
بالإضافة إلى تمرير قائمة الشخصيات ، نحتاج أيضًا إلى تمرير personcomparator ، لأن كيفية مقارنة حجم الشخص في Personcomparator
تم تنفيذه في ، مثل:
Collections.sort (Personlist ، New PersonComparator ()).
3. أمثلة للمقارنة والقابلة للمقارنة
قابلة للمقارنة:
لتنفيذ الواجهة المماثلة ، يجب عليك تجاوز طريقة المقارنة. تنفيذ المقارنة في طريقة المقارنة:
شخص فئة عامة ينفذ قابلة للمقارنة {string name ؛ int age ؛ public int compareto (شخص آخر) {int i = 0 ؛ i = name.compareto (other.name) ؛ // المقارنة باستخدام السلاسل إذا (i == 0) {// إذا كانت الأسماء هي نفسها ، قارن العمر ، عودة عمر العائد - other.age ؛} آخر {return i ؛ // الأسماء مختلفة ، إرجاع نتيجة مقارنة الأسماء.}}}في هذا الوقت ، يمكننا فرزها مباشرة باستخدام Collections.Sort (قائمة الشخصيات).
المقارنة:
يتطلب تطبيق المقارنة تجاوز طريقة المقارنة:
شخص فئة عامة {string name ؛ int Age ؛} class personcomparator يبرز المقارنة <profern> {public int compare (الشخص الأول ، الشخص الآخر) {int i = 0 ؛ i = One.name.compareto (other.name) ؛ // المقارنة باستخدام السلاسل إذا (i == 0) {// إذا كان الاسم هو نفسه ، قارن العمر ، وإرجاع نتيجة مقارنة العمر one.age - other.age ؛} آخر {return i ؛ // الأسماء مختلفة ، وإرجاع نتيجة مقارنة الأسماء.}}}}4: ملخص
كلتا الطريقتين لها مزاياها وعيوبها. من السهل استخدام قابلة للمقارنة. طالما أن الكائن الذي ينفذ الواجهة المماثلة تصبح كائنًا مماثلًا ،
ومع ذلك ، يجب تعديل رمز المصدر. تتمثل ميزة استخدام المقارنة في أنه لا يحتاج إلى تعديل الكود المصدري ، ولكن أيضًا ينفذ مقارنة. عندما تحتاج إلى مقارنة كائن مخصص ، يمكن تمرير المقارنة والكائن معًا لمقارنة الحجم. في المقارنة ، يمكن للمستخدمين تطبيق المنطق المعقد والعامة بأنفسهم ، حتى يتمكنوا من مطابقة بعض الكائنات البسيطة نسبيًا ، والتي يمكن أن توفر الكثير من العمل المتكرر.