কোনও শ্রেণি কখন তুলনীয় এবং / বা তুলনামূলক হওয়া উচিত?


138

আমি ক্লাসগুলি দেখেছি যা তুলনামূলক এবং তুলনামূলক উভয়ই প্রয়োগ করে । এটার মানে কি? আমি কেন একে অপরকে ব্যবহার করব?


18
আপনি তাদের উপর javadoc পড়েছেন? এটি বিভিন্ন স্পষ্টভাবে বর্ণনা করে।
skaffman

1
তুলনীয় এবং তুলনামূলক কী এবং কখন তুলনীয় এবং তুলনামূলক ব্যবহার করা উচিত। এগুলি জানতে এই লিঙ্কটি পড়ুন। এটি আপনাকে তাদের আচরণ এবং ব্যবহার বুঝতে সাহায্য করবে। http://iandjava.blogspot.in/2012/10/comparable-and-comparator.html
রকস্টার

6
এটি একটি ভাল, উদ্দেশ্যমূলক উত্তর সহ একটি ভাল প্রশ্ন। আমি হতাশ হই যে এটি বন্ধ আছে is
রাসেল সিলভা

3
স্ট্যাকওভারফ্লোতে থাকা অন্যান্য প্রশ্নগুলি এটিকে "তুলনামূলক এবং তুলনীয় মধ্যে পার্থক্য কী" প্রশ্ন হিসাবে চিহ্নিত করে। কেন এটি "গঠনমূলক নয়" হিসাবে চিহ্নিত করা হয়েছে? জাভা নবাবী হিসাবে, এটি একটি খুব দরকারী প্রশ্ন!
পিট

উত্তর:


241

নীচের পাঠ্যটি তুলনামূলক বনাম তুলনামূলক থেকে এসেছে

তুলনাযোগ্য

একটি তুলনামূলক অবজেক্ট অন্য বস্তুর সাথে নিজেকে তুলনা করতে সক্ষম। শ্রেণীর নিজেই java.lang.Comparableইন্টারফেসটি এর উদাহরণগুলির সাথে তুলনা করতে সক্ষম করে।

comparator

একটি তুলনামূলক বস্তু দুটি পৃথক বস্তুর তুলনা করতে সক্ষম। শ্রেণিটি তার দৃষ্টান্তগুলির তুলনা করে না, তবে কিছু অন্যান্য শ্রেণির উদাহরণগুলির তুলনা করে। এই তুলনামূলক শ্রেণি অবশ্যই java.util.Comparatorইন্টারফেস প্রয়োগ করতে হবে ।


তুলনামূলক এবং তুলনামূলক উভয়ের ব্যবহারের বিশদ ব্যাখ্যার জন্য: sysdotoutdotprint.com/index.php/2017/03/28/…
mel3kings

2
আরেকটি ভাল নিবন্ধ: কোডেক্রাম্প.com
ইএমএম

@ মেল3কিংস - লিঙ্কটি আর অ্যাক্সেসযোগ্য নয়।
গৌরব

152

বাস্তবায়নের Comparableঅর্থ " আমি নিজেকে অন্য কোনও জিনিসের সাথে তুলনা করতে পারি " "যখন একক প্রাকৃতিক ডিফল্ট তুলনা হয় তখন এটি সাধারণত কার্যকর হয়।

বাস্তবায়নের Comparatorঅর্থ " আমি অন্য দুটি বস্তুর তুলনা করতে পারি " "এটি সাধারণত কার্যকর হয় যখন কোনও ধরণের দুটি উদাহরণের তুলনা করার একাধিক উপায় থাকে - যেমন আপনি বয়স, নাম ইত্যাদি দ্বারা লোকের তুলনা করতে পারেন This


1
হ্যালো স্কিট, আপনি দয়া করে তুলনীয় এবং তুলনামূলক ব্যবহার করে কোডটি ফেলে দিতে পারেন।
মোঃ .9

5
@ এমডিহার 9 ই: চারপাশে প্রচুর উদাহরণ রয়েছে - যদি আপনার এটিকে আপনার নির্দিষ্ট দৃশ্যে অনুবাদ করতে অসুবিধা হয় তবে দয়া করে একটি নতুন প্রশ্নে আরও তথ্য দিন।
জন স্কিটি

2
@ আলিরিজা: আমি ইতিমধ্যে দ্বিতীয় অনুচ্ছেদে একটি উদাহরণ দিয়েছি: আলাদা তুলনা করে আপনি একই সংগ্রহকে (লোক) বিভিন্ন বৈশিষ্ট্য (বয়স, নাম ইত্যাদি) অনুসারে বাছাই করতে পারেন। আপনি কেবল Personপ্রয়োগ করে এটি Comparableকরতে পারবেন না, কারণ আপনি তখন দুটি ব্যক্তির তুলনা কীভাবে পরিবর্তন করতে পারবেন না ।
জন স্কিটি

1
@ ফেইলগুড্যান্ডপ্রগ্রামিং: না, এগুলি বিভিন্ন বাছাই করা অ্যালগরিদম । এখানে কোডের তিনটি টুকরো রয়েছে, তিনটি বিভিন্ন শ্রেণিতে: 1) সত্তা নিজেই, যেমন Person। 2) তুলনাকারী, উদাহরণস্বরূপ, PersonAgeComparatorযা দুটি পৃথক সত্ত্বার তুলনা করতে সক্ষম হয় এবং সিদ্ধান্ত নিতে পারে যে নির্দিষ্ট ক্রমের মধ্যে প্রথমে কোনটি আসবে। 3) সাজানো কোড, যা সত্তা এবং একটি তুলনাকারীর সংগ্রহ গ্রহণ করে এবং ক্রমটি নির্ধারণ করতে তুলনামূলক ব্যবহার করে এই সংগ্রহটি সাজায়।
জন স্কিটি

2
@ Iষিকেশ পাঠক: আচ্ছা, তুলনা করার জন্য যদি কেবলমাত্র একটিমাত্র সুস্পষ্ট জিনিসের তুলনা করা যায় তবে আপনি তুলনামূলক ব্যবহার করেন। এবং তারপরেও আপনি কেবল একটি তুলনামূলক লিখতে পারেন । আপনার যদি একই ক্লাসটি ব্যবহার করে দুটি পৃথক প্রোগ্রাম থাকে এবং একটিতে কেবল বয়স এবং অন্যটি কেবল নাম অনুসারে বাছাই করতে চায় তবে তাদের মধ্যে কমপক্ষে একটিকে তুলনামূলক ব্যবহার করতে হবে।
জন স্কিটি

38

তুলনীয় কোনও শ্রেণিকে তার নিজস্ব তুলনা প্রয়োগ করতে দেয়:

  • এটি একই ক্লাসে রয়েছে (এটি প্রায়শই একটি সুবিধা হয়)
  • কেবলমাত্র একটি বাস্তবায়ন হতে পারে (যাতে আপনি দুটি ভিন্ন মামলা চান তবে এটি ব্যবহার করতে পারবেন না)

তুলনা করে, তুলনামূলক একটি বাহ্যিক তুলনা:

  • এটি সাধারণত একটি অনন্য উদাহরণে হয় (হয় একই শ্রেণিতে বা অন্য কোনও জায়গায়)
  • আপনি যেভাবে জিনিসগুলিকে বাছাই করতে চান তার সাথে প্রতিটি বাস্তবায়নের নাম দিন
  • আপনি যে ক্লাসগুলিতে নিয়ন্ত্রণ করেন না তার জন্য তুলনামূলক সরবরাহ করতে পারেন
  • প্রথম বস্তুটি শূন্য থাকলেও বাস্তবায়ন কার্যকর হয়

উভয় বাস্তবায়নে, আপনি এখনও তুলনা করতে চান তা চয়ন করতে পারেন । জেনেরিকের সাহায্যে আপনি এটি ঘোষণা করতে পারেন, এবং এটি সংকলন-সময় পরীক্ষা করা উচিত। এটি সুরক্ষার উন্নতি করে, তবে উপযুক্ত মান নির্ধারণ করাও একটি চ্যালেঞ্জ।

গাইডলাইন হিসাবে, আমি সাধারণত সবচেয়ে সাধারণ শ্রেণি বা ইন্টারফেস ব্যবহার করি যার সাথে সেই বস্তুর তুলনা করা যায়, সব ক্ষেত্রেই আমি কল্পনা করি ... যদিও খুব সংক্ষিপ্ত সংজ্ঞা নেই! :-(

  • Comparable<Object>সংকলন-সময়ে আপনাকে সমস্ত কোডগুলিতে এটি ব্যবহার করতে দেয় (যা প্রয়োজনে ভাল, বা না হলে খারাপ এবং আপনি কম্পাইল-সময় ত্রুটিটি আলগা করেন); আপনার বাস্তবায়নের সাথে অবজেক্টগুলি মোকাবেলা করতে হবে, এবং প্রয়োজন মতো কাস্ট করতে হবে তবে শক্তিশালী উপায়ে।
  • Comparable<Itself> বিপরীতে খুব কঠোর।

মজার বিষয়, আপনি যখন নিজেকে সাবক্লাসে সাবক্লাস করেন, সাবক্লাসটি অবশ্যই তুলনামূলক হতে হবে এবং এটি সম্পর্কে দৃust় হতে হবে (বা এটি লিসকভের মূলনীতিটি ভঙ্গ করবে এবং আপনাকে রানটাইম ত্রুটি দেবে)।


20

java.lang.Comparable

  1. Comparableইন্টারফেস বাস্তবায়নের জন্য , শ্রেণিকে অবশ্যই একটি পদ্ধতি প্রয়োগ করতে হবেcompareTo()

    int a.compareTo(b)

  2. যার ক্লাসটি আপনি বাছাই করতে চান আপনাকে অবশ্যই তাকে ক্লাসে পরিবর্তন করতে হবে। যাতে প্রতি ক্লাসে কেবল একটি সাজানোর ক্রম তৈরি করা যায়।

java.util.Comparator

  1. তুলনামূলক ইন্টারফেস প্রয়োগ করতে, শ্রেণিকে অবশ্যই একটি একক পদ্ধতি প্রয়োগ করতে হবে compare()

    int compare (a,b)

  2. আপনি শ্রেণীর থেকে পৃথক একটি শ্রেণী তৈরি করেন যার উদাহরণটি আপনি বাছাই করতে চান। যাতে প্রতি ক্লাসে একাধিক সাজানোর ক্রম তৈরি করা যায়।

14

Comparable ডেটা অবজেক্টগুলিতে একটি ডিফল্ট অর্ডার প্রদানের জন্য, উদাহরণস্বরূপ যদি ডেটা অবজেক্টগুলির একটি প্রাকৃতিক ক্রম থাকে।

Comparatorএকটি নির্দিষ্ট ব্যবহারের জন্য ক্রমকে অর্ডার করে।


8

Comparableসাধারণত পছন্দ হয়। তবে কখনও কখনও কোনও শ্রেণি ইতিমধ্যে প্রয়োগ করে Comparableতবে আপনি একটি পৃথক সম্পত্তি বাছাই করতে চান। তারপরে আপনি একটি ব্যবহার করতে বাধ্য হন Comparator

কিছু ক্লাস আসলে Comparatorsসাধারণ ক্ষেত্রে সরবরাহ করে; উদাহরণস্বরূপ, বাছাই করার সময় Stringগুলি ডিফল্ট ক্ষেত্রে সংবেদনশীল হয়, তবে একটি স্ট্যাটিকও Comparatorবলা হয় CASE_INSENSITIVE_ORDER


7
আমি নিশ্চিত নই যে আমি তুলনামূলক পছন্দ হওয়ার সাথে একমত। কিছু বস্তুর প্রাকৃতিক শৃঙ্খলা সম্পর্কে দৃ sense় ধারণা রয়েছে - নাম্বারগুলি, সমস্ত আকারে: প্রাকৃতিক সংখ্যা, আসল সংখ্যা, তারিখ ইত্যাদি But অ্যাপ্লিকেশন ডোমেন মডেল থেকে সত্তার মতো আরও জটিল বস্তুর ক্ষেত্রে, তুলনামূলক বাস্তবায়ন করা সাধারণত একটি ভুল। তাদের অনেক বৈশিষ্ট্যটি প্রায়শই কী অর্ডার চায় তা অনুমান করা খুব কঠিন করে তোলে।
ইরিকসন

6

আমি ওয়েবে যে তুলনামূলক এবং তুলনীয় পেয়েছি তার মধ্যে কয়েকটি পার্থক্য রয়েছে:

  1. যদি আপনি দেখতে পান তবে এই দুটিয়ের মধ্যে যৌক্তিক পার্থক্য হ'ল জাভাতে তুলনাকারী তাকে সরবরাহিত দুটি বস্তুর তুলনা করুন, যখন তুলনামূলক ইন্টারফেসটি "এই" রেফারেন্সটিকে নির্দিষ্ট বস্তুর সাথে তুলনা করে।

  2. জাভাতে তুলনীয় বস্তুর প্রাকৃতিক ক্রম প্রয়োগ করতে ব্যবহৃত হয়। জাভা এপিআই স্ট্রিংয়ে, তারিখ এবং মোড়কের ক্লাসগুলি তুলনামূলক ইন্টারফেস প্রয়োগ করে।

  3. জাভাতে যদি কোনও শ্রেণি তুলনামূলক ইন্টারফেস প্রয়োগ করে তবে সেই সংগ্রহ বা তালিকা বা অ্যারেটি সংগ্রহের মাধ্যমে সংগ্রহ বাছাই করা যাবে স্বয়ংক্রিয়ভাবে বাছাই করা যাবে সংগ্রহ () বা অ্যারে.সোর্ট () পদ্ধতি এবং অবজেক্টের তুলনা করে সেখানে প্রাকৃতিক আদেশের ভিত্তিতে তুলনামূলক পদ্ধতি দ্বারা নির্ধারিত।

  4. জাভাগুলিতে তুলনামূলক প্রয়োগকারী অবজেক্টগুলি কোনও সাজানো মানচিত্রের চাবি বা একটি বাছাই করা সেটগুলিতে উদাহরণস্বরূপ ট্রিসেটের জন্য উপাদান হিসাবে ব্যবহার করা যেতে পারে, কোনও তুলনামূলক নির্দিষ্ট না করেই।

সাইট: জাভাতে তুলনামূলক এবং তুলনামূলক কীভাবে ব্যবহার করবেন? উদাহরণ সহ

আরও পড়ুন: জাভাতে তুলনামূলক এবং তুলনামূলক কীভাবে ব্যবহার করবেন? উদাহরণ সহ


5

Comparableপ্রাকৃতিক ক্রম সহ বস্তুর জন্য। এটি কীভাবে অর্ডার করা হবে তা অবজেক্ট নিজেই জানে।
Comparatorপ্রাকৃতিক অর্ডার ছাড়াই বা যখন আপনি অন্য কোনও ক্রম ব্যবহার করতে চান তখন অবজেক্টগুলির জন্য।


4

তুলনামূলক এবং তুলনীয় ইন্টারফেসের মধ্যে পার্থক্য

Comparable অন্য বস্তুর সাথে ব্যবহার করে নিজেকে তুলনা করতে ব্যবহৃত হয়।

Comparator দুটি ডেটাটাইপগুলি তুলনা করতে ব্যবহৃত হয় অবজেক্টস।


2

যদি আপনি দেখতে পান তবে এই দুটিয়ের মধ্যে যৌক্তিক পার্থক্য Comparatorজাভাতে রয়েছে তাকে সরবরাহ করা দুটি বস্তুর তুলনা করুন, যখন Comparableইন্টারফেসটি "এই" রেফারেন্সটিকে নির্দিষ্ট বস্তুর সাথে তুলনা করে।

Comparableজাভাতে অবজেক্টের প্রাকৃতিক ক্রম প্রয়োগ করতে ব্যবহৃত হয়। জাভা এপিআই স্ট্রিংয়ে, তারিখ এবং মোড়কের ক্লাসগুলি Comparableইন্টারফেস প্রয়োগ করে ।

কোন শ্রেণীর বাস্তবায়ন তাহলে Comparableজাভা ইন্টারফেস তারপর যে বস্তুর সংগ্রহে পারেন Listবা Arrayব্যবহার করার মাধ্যমে স্বয়ংক্রিয়ভাবে বাছাই করা যেতে পারে Collections.sort()বা Array.sort()পদ্ধতি এবং বস্তুর প্রাকৃতিক দ্বারা সংজ্ঞায়িত অর্ডার উপর ভিত্তি করে সাজানো হবে compareToপদ্ধতি।

Comparableজাভাতে কার্যকর করা বস্তুগুলি কোনও বাছাই করা মানচিত্রের বা একটি বাছাই করা TreeSetসেটগুলিতে উদাহরণস্বরূপ , বাছাই করা মানকগুলিতে কী হিসাবে ব্যবহার করা যেতে পারে Comparator


0

তুলনামূলক এবং তুলনাকারী প্রয়োগের জন্য আমার টিকা লিবিব:

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


3
স্ট্যাকওভারফ্লোতে স্বাগতম। এই প্রশ্নটি পুরানো এবং ইতিমধ্যে উত্তর দেওয়া হয়েছিল। সাধারণত, আপনার প্রতিক্রিয়া আগের উত্তরগুলির তুলনায় উল্লেখযোগ্যভাবে নতুন বা ভিন্ন কিছু অবদান না দিলে বাসি থ্রেডগুলিকে পুনরুত্থিত না করা ভাল।
oers
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.