متى يجب أن فئة تكون قابلة للمقارنة و/أو المقارنة?[مغلقة]

StackOverflow https://stackoverflow.com/questions/1440134

  •  10-07-2019
  •  | 
  •  

سؤال

لقد رأيت الطبقات التي تنفذ على حد سواء للمقارنة و المقارنة.ماذا يعني هذا ؟ لماذا يمكنني استخدام واحدة على الأخرى ؟

هل كانت مفيدة؟

المحلول

النص أدناه يأتي من المقارنة vs للمقارنة

للمقارنة

مقارنة كائن قادر على مقارنة نفسه مع كائن آخر.الطبقة نفسها يجب أن تنفذ java.lang.Comparable واجهة من أجل أن تكون قادرة على المقارنة بين الحالات.

المقارنة

للمقارنة كائن قادر على المقارنة بين اثنين من كائنات مختلفة.الطبقة ليست المقارنة بين الحالات ، لكن بعض الفئة الحالات.هذه المقارنة فئة يجب أن تنفذ java.util.Comparator واجهة.

نصائح أخرى

تنفيذ Comparable يعني "لا يمكن أن أقارن نفسي مع كائن آخر."هذا هو عادة مفيدة عندما يكون هناك واحد الطبيعي الافتراضي المقارنة.

تنفيذ Comparator يعني "لا يمكن المقارنة بين الكائنات الأخرى."هذا هو عادة مفيدة عندما يكون هناك عدة طرق المقارنة بين حالتين من نوع - على سبيل المثال ، هل يمكن مقارنة شخص حسب العمر ، اسم الخ.

مقارنة يتيح فئة التنفيذ الخاصة بها المقارنة:

  • انها في نفس الفئة (غالبا ما يكون ميزة)
  • يمكن أن يكون هناك فقط تطبيق واحد (لذلك لا يمكنك استخدام هذا إذا كنت تريد حالتين)

من خلال المقارنة المقارنة خارجي المقارنة:

  • فمن عادة في المثال فريدة (إما في نفس الصف أو في مكان آخر)
  • لك اسم كل تطبيق مع الطريقة التي تريد فرز الأشياء
  • يمكنك توفير مقارنة بالنسبة الفئات التي لا يمكنك التحكم به
  • التنفيذ قابلة للاستخدام حتى لو كان الكائن الأول باطل

في كل التطبيقات ، يمكنك لا يزال اختيار ما كنت تريد أن تكون مقارنة.مع الأدوية, يمكنك أن يعلن ذلك ، و قد تحققت في وقت التحويل البرمجي.هذا يحسن السلامة ، وإنما هو أيضا تحديا لتحديد القيمة المناسبة.

كمبدأ توجيهي ، عموما أنا استخدم معظم الفئة العامة أو واجهة هذا الكائن يمكن أن تكون مقارنة ، في جميع حالات استخدام أتصور...غير دقيق التعريف على الرغم من !:-(

  • Comparable<Object> يتيح لك استخدامه في جميع رموز في وقت التحويل البرمجي (وهو أمر جيد إذا لزم الأمر, أو سيئة إذا لم وتفقد في وقت التحويل البرمجي خطأ) ;التنفيذ للتعامل مع الكائنات و الزهر حسب الحاجة ولكن في طريقة قوية.
  • Comparable<Itself> هي صارمة جدا على العكس من ذلك.

مضحك عندما فرعية نفسها فرعية, فرعية كما يجب أن تكون قابلة للمقارنة و تكون قوية حول هذا الموضوع (أو أنه كسر Liskov المبدأ ، وتعطيك أخطاء وقت التشغيل).

java.لانغ.للمقارنة

  1. لتنفيذ Comparable واجهة الطبقة يجب تنفيذ أسلوب واحد compareTo()

    int a.compareTo(b)

  2. يجب تعديل الدرجة التي سبيل المثال تريد فرزه.حتى أن واحدة فقط من نوع تسلسل يمكن أن تنشأ في الصف الواحد.

java.util.المقارنة

  1. لتنفيذ المقارنة واجهة الطبقة يجب تنفيذ أسلوب واحد compare()

    int compare (a,b)

  2. يمكنك بناء فئة منفصلة عن الدرجة التي سبيل المثال تريد فرزه.بحيث متعددة نوع تسلسل يمكن أن تنشأ في الصف الواحد.

Comparable هو توفير الافتراضي الطلب على كائنات البيانات ، على سبيل المثال إذا كانت البيانات كائنات النظام الطبيعي.

A Comparator يمثل ترتيب نفسها من أجل استخدام محدد.

Comparable يفضل عادة.ولكن في بعض الأحيان فئة ينفذ بالفعل Comparable, ولكن كنت ترغب في فرز على خاصية مختلفة.ثم كنت اضطر لاستخدام Comparator.

بعض دروس توفر في الواقع Comparators الشائعة الحالات ؛ فعلى سبيل المثال ، Strings بشكل افتراضي لحالة الأحرف عندما يتم فرزها ، ولكن هناك أيضا ثابت Comparator دعا CASE_INSENSITIVE_ORDER.

وإليك بعض الاختلافات بين المقارنة و المقارنة وجدت على شبكة الإنترنت :

  1. إذا كنت ترى ثم المنطقية الفرق بين هذين هو المقارنة في جافا مقارنة بين الكائنات المقدمة له ، في حين للمقارنة واجهة يقارن "هذا" إشارة مع الكائن المحدد.

  2. للمقارنة في جافا وتستخدم لتنفيذ الطبيعية يأمر من وجوه.في جافا API سلسلة تاريخ المجمع الطبقات تنفيذ واجهة مماثلة.

  3. إذا كان أي فئة من تنفيذ مماثلة في واجهة جافا ثم جمع هذا الكائن إما قائمة أو مجموعة يمكن أن تخزن تلقائيا باستخدام مجموعات.النوع() أو مجموعة.نوع الأسلوب() وجوه سيتم فرز استنادا إلى هناك من أجل تعريف CompareTo الأسلوب.

  4. الكائنات التي تنفذ مماثلة في جافا يمكن استخدام المفاتيح في فرز خريطة أو عناصر في فرز مجموعة على سبيل المثال TreeSet دون تحديد أي المقارنة.

الموقع:كيفية استخدام المقارنة و المقارنة في جافا ؟ مع المثال

اقرأ المزيد: كيفية استخدام المقارنة و المقارنة في جافا ؟ مع المثال

Comparable هي أشياء طبيعية الطلب.الكائن نفسه يعرف كيف هو أن يكون أمر.
Comparator هو الأشياء من دون الطبيعي يأمر أو عندما ترغب في استخدام مختلف الطلب.

الفرق بين المقارنة و المقارنة واجهات

Comparable يستخدم لمقارنة نفسه باستخدام مع كائن آخر.

Comparator يستخدم للمقارنة بين أنواع البيانات هي كائنات.

إذا كنت ترى ثم المنطقية الفرق بين هذين هو Comparator في جافا مقارنة بين الكائنات المقدمة له ، في حين Comparable واجهة يقارن "هذا" إشارة مع الكائن المحدد.

Comparable في جافا وتستخدم لتنفيذ الطبيعية يأمر من وجوه.في جافا API سلسلة تاريخ المجمع الطبقات تنفيذ Comparable واجهة.

إذا كان أي فئة التنفيذ Comparable واجهة جافا ثم جمع هذا الكائن إما List أو Array يمكن فرز تلقائيا باستخدام Collections.sort() أو Array.sort() طريقة وجوه سيتم فرز استنادا إلى هناك من أجل تعريف compareTo الأسلوب.

الكائنات التي تنفذ Comparable في جافا يمكن استخدام المفاتيح في فرز خريطة أو عناصر في فرز مجموعة على سبيل المثال TreeSet, دون تحديد أي Comparator.

بلدي الشرح lib لتنفيذ المقارنة و المقارنة:

public class Person implements Comparable<Person> {         
    private String firstName;  
    private String lastName;         
    private int age;         
    private char gentle;         

    @Override         
    @CompaProperties({ @CompaProperty(property = "lastName"),              
        @CompaProperty(property = "age",  order = Order.DSC) })           
    public int compareTo(Person person) {                 
        return Compamatic.doComparasion(this, person);         
    }  
} 

انقر على الرابط لرؤية المزيد من الأمثلة. compamatic

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top