في الشيفرة المرفقة، نجد تعريفًا للكلاس MyComp
الذي يقوم بتنفيذ واجهة Comparator
للنصوص. يتم تنفيذ الطريقة compare
في هذا الكلاس بحيث يتم مقارنة النصوص بالاتجاه المعاكس، حيث يُرجع القيمة الناتجة عن استخدام طريقة compareTo
لنص الوجهتين.
في الكلاس CustomComparatorTest
، يتم إنشاء كائن من الكلاس MyComp
باسم my
، ثم يتم إنشاء TreeSet
من النصوص مع استخدام الكائن my
كمقارن. بعد ذلك، يتم إضافة عدة نصوص إلى TreeSet
، وأخيرًا يتم طباعة النصوص من TreeSet
باستخدام حلقة for-each
.
الناتج المتوقع هو طباعة النصوص المرتبة تنازليًا وفقًا للمقارنة التي تم تعيينها في MyComp
. وبناءً على الشيفرة المقدمة، يتم طباعة النصوص بالترتيب التالي: “Y”, “W”, “T”, “C”, “B”, “A”.
في هذا السياق، يمكن القول إن استخدام طريقة compare
في MyComp
يتيح لنا تحديد كيفية ترتيب العناصر في TreeSet
بشكل مخصص، دون الحاجة إلى استدعاء طريقة compare
بشكل مباشر في الكود الرئيسي (main method
). تتم هذه العملية تلقائيًا عندما يتم إنشاء TreeSet
باستخدام الكائن my
كمقارن.
المزيد من المعلومات
تعمقًا في الكود المقدم، يمكن فهم كيف يتم تحقيق الترتيب المخصص باستخدام واجهة Comparator
في Java. يعتمد الأمر على تنفيذ طريقة compare
في الكلاس MyComp
.
في الكود، يتم تعريف MyComp
ككلاس ينفذ Comparator
، مما يعني أنه يستخدم للمقارنة بين الكائنات من النوع String
. في طريقة compare
، يتم تنفيذ مقارنة بين النصوص باستخدام compareTo
، ولكن بطريقة معكوسة (bStr.compareTo(aStr)
)، مما يؤدي إلى ترتيب تنازلي.
عندما يتم إنشاء TreeSet
باستخدام كائن my
كمقارن، يستخدم الـ TreeSet
هذا المقارن لترتيب العناصر بناءً على المنطق المعرف في MyComp
. يُظهر الكود كيف يتم إضافة النصوص إلى TreeSet
وكيف يتم طباعتها بترتيب محدد مسبقًا.
هذه الطريقة تعتبر قوية في حال كان لديك حاجة إلى تخصيص ترتيب العناصر في هيكل بيانات مثل TreeSet
. إن استخدام واجهة Comparator
يمنحك المرونة لتعريف ترتيب مخصص دون الحاجة إلى تعديل الكلاس الرئيسي للنوع الذي تعمل عليه.