কম্পিউটার

জাভাতে equals() এবং হ্যাশকোড() পদ্ধতির মধ্যে চুক্তি কি?


প্রতিটি জাভা অবজেক্টের দুটি অত্যন্ত গুরুত্বপূর্ণ পদ্ধতি রয়েছে সমান() এবং হ্যাশকোড() এবং এই পদ্ধতিগুলি তাদের নির্দিষ্ট সাধারণ চুক্তি অনুযায়ী ওভাররাইড করার জন্য ডিজাইন করা হয়েছে৷ . একটি বস্তু ক্লাস প্রতিটি ক্লাসের প্যারেন্ট ক্লাস, এই দুটি পদ্ধতির ডিফল্ট বাস্তবায়ন ইতিমধ্যে প্রতিটি ক্লাসে উপস্থিত রয়েছে। যাইহোক, আমরা প্রয়োজনের ভিত্তিতে এই পদ্ধতিগুলিকে ওভাররাইড করতে পারি৷

হ্যাশকোড() পদ্ধতি

public int hashCode()

এই পদ্ধতিটি একটি পূর্ণসংখ্যা প্রদান করে মান, যা একটি বস্তুর হ্যাশ কোড মান হিসাবে উল্লেখ করা হয়। প্রতিটি অবজেক্ট, তৈরির সময় একটি অনন্য 32-বিট, স্বাক্ষরিত int মান দিয়ে বরাদ্দ করা হয়। এই মানটি সেই বস্তুর হ্যাশ কোড মান।

হ্যাশকোড() পদ্ধতির সাথে যুক্ত সাধারণ চুক্তি

  • হ্যাশকোড() পদ্ধতিটি এই পদ্ধতির প্রতিটি কলিংয়ের জন্য একই বস্তুর জন্য একই পূর্ণসংখ্যার মান প্রদান করবে যদি না অবজেক্টে সংরক্ষিত মান পরিবর্তন করা হয়।
  • যদি দুটি বস্তু সমান হয় (equals() অনুযায়ী পদ্ধতি) তারপর হ্যাশকোড() পদ্ধতি উভয় বস্তুর জন্য একই পূর্ণসংখ্যার মান প্রদান করবে।
  • কিন্তু, হ্যাশকোড() এর প্রয়োজন নেই পদ্ধতিটি সমান নয় এমন বস্তুর জন্য স্বতন্ত্র ফলাফল প্রদান করবে (equals() অনুযায়ী পদ্ধতি)।

সমান() পদ্ধতি

public boolean equals(Object obj)

সমান() অবজেক্ট ক্লাসের পদ্ধতি বস্তুর সমতা পরীক্ষা করে এবং সেই অনুযায়ী এটি রিটার্ন করে সত্য অথবা মিথ্যা . অবজেক্ট ক্লাস দ্বারা প্রদত্ত ডিফল্ট বাস্তবায়ন, যদি উভয় রেফারেন্স একই বস্তুর উল্লেখ করে তবে ভিত্তিতে বস্তুর সমতা পরীক্ষা করে। এটি বস্তুর মান বা অবস্থা পরীক্ষা করে না। কিন্তু বস্তুর অবস্থা বা মান তুলনা করার জন্য আমরা নিজস্ব বাস্তবায়ন প্রদানের জন্য এই পদ্ধতিটিকে ওভাররাইড করতে পারি।

ইকুয়ালস() পদ্ধতির সাথে যুক্ত সাধারণ চুক্তি

কোনো নন-নাল রেফারেন্স ভেরিয়েবলের জন্য a, b এবং c

  • a.equals(a) সর্বদা সত্য ফিরে আসা উচিত .
  • a.equals(b) সত্য ফিরে আসা উচিত যদি এবং শুধুমাত্র যদি b.equals(a) সত্য ফেরত দেয়।
  • যদি a.equals(b) সত্য ফেরত দেয় এবং b.equals(c) সত্য ফেরত দেয় তারপর a.equals(c) সত্য ফিরে আসা উচিত .
  • a.equals(b) এর একাধিক কলিং ধারাবাহিকভাবে সত্য ফিরে আসা উচিত অথবা ধারাবাহিকভাবে false ফেরত দিন যদি বস্তুর মান উভয় বস্তুর জন্য পরিবর্তিত না হয়।
  • a.equals(null) মিথ্যা ফেরত দেওয়া উচিত .

তাই hashCode() ওভাররাইড করা প্রয়োজন অবজেক্ট ক্লাসের পদ্ধতি যদি আমরা equals() ওভাররাইড করি পদ্ধতি।

উদাহরণ

public class MainClass {
   public static void main(String[] args) {
      MainClass mainClass = new MainClass();
      TestClass obj1 = new TestClass(1);
      TestClass obj2 = new TestClass(1);
      mainClass.test1(obj1, obj2);
      TestClass obj3 = new TestClass(1);
      TestClass obj4 = new TestClass(2);
      mainClass.test2(obj3, obj4);
   }
   public void test1(TestClass obj1, TestClass obj2) {
      if (obj1.equals(obj2)) {
         System.out.println("Object One and Object Two are equal");
      }
      else {
         System.out.println("Object One and Object Two are not equal");
      }
   }
   public void test2(TestClass obj3, TestClass obj4) {
      if (obj3.equals(obj4)) {
         System.out.println("Object Three and Object Four are equal");
      }
      else {
         System.out.println("Object Three and Object Four are not equal");
      }
   }
}
class TestClass {
   private int val;
   TestClass(int val) {
      this.val = val;
   }
   public int getValue() {
      return val;
   }
   @Override
   public boolean equals(Object o) {
      // null check
      if (o == null) {
         return false;
      }
      // this instance check
      if (this == o) {
         return true;
      }
      // instanceof Check and actual value check
      if ((o instanceof TestClass) && (((TestClass) o).getValue() == this.val)) {
         return true;
      }
       else {
         return false;
      }
   }
   @Override
   public int hashCode() {
      int result = 0;
      result = (int) (val / 11);
      return result;
   }
}

আউটপুট

Object One and Object Two are equal
Object Three and Object Four are not equal

  1. জাভাতে JTextField এবং JTextArea এর মধ্যে পার্থক্য কি?

  2. জাভাতে JFrame এবং JDialog এর মধ্যে পার্থক্য কি?

  3. JRE এবং JDK মধ্যে পার্থক্য কি?

  4. জাভা এবং জাভাস্ক্রিপ্টের মধ্যে পার্থক্য কী?