জাভাতে Hash Table বা Hash Map – HashSet [ হ্যাসসেট ] ও এর ব্যবহার।

Hash Table বা Hash Map  মোটামুটি এডভান্সড ডেটা স্ট্রাকচার।  Hash Table বা Hash Map  কে ব্যবহার  করার জন্য একটা ক্লাস হচ্ছে HashSet যা AbstractSet ক্লাসকে এক্সটেন্ড করে এবং Set ইন্টারফেস ইমপ্লিমেন্ট করে তৈরি করা হয়েছে জাভাতে Hash Table ইমপ্লিমেন্ট করার জন্য।

HashSet এ পরে আসি। আগে Hash Table বা Hash Map কি তা একটু জানি। Hash Table ইনফমেশন বা ডেটা কে একটা ফাংশনের মাধ্যমে স্টোর করে যার নাম Hassing বা Hash Function. Hassing  এ Key থেকে একটি ইউনিক কোড বের করা হয় যাকে বলে Hash Code. তার পর এ Hash Code এর সাহায্যে ঐ Key  স্টোর করা হয়। Hash Table এর প্রধাম সুবিধে হচ্ছে ব্যাসিক অপারেশনের জন্য কনস্টেন্ট টাইম লাগে।

নিচের ছবিটি দেখুনঃ

hash function

Hash table সম্পর্কে জানার জন্য গুগলে একটু সার্চ করলেই অনেক গুলো আর্টিকেল পাবেন। আর নিচের ভিডিওটাও দেখতে পারেন। এর সাথে রিলেটেড আরো কিছু ভিডিও দেখার জন্য অনুরোধ করব।

আপনি নিজে নিজে হ্যাস ফাংশন তৈরি করতে চাইলে এ ভিডিওটা দেখতে পারেনঃ

আমরা জাভাতে একটি Hash Table তৈরি করতে পারি HashSet hash = new HashSet(); এর সাহায্যে। তার জন্য আমাদেরকে java.util.HashSet;  ক্লাসটি import করে নিতে হবে। কোন ডেটা যোগ করার জন্য add(“Data”); দিলে ডেটা যোগ হয়ে যাবে Hash Table এর মধ্যে।

বিদ্রঃ Hash Table এ অন্যান্য ডেটা স্ট্রাকচার, যেমন Array, ArrayList, LinkedList ইত্যাদির মত সর্টেড অর্ডারে ডেটা Add হয় না। একবার একেক অর্ডারে ডেটা এড হয়।  নিচের উদাহরনটা দেখুনঃ

package hashsetdemo;

import java.util.HashSet;

public class HashSetDemo {

public static void main(String[] args) {

 HashSet hash = new HashSet();

 hash.add("Dhaka");
 hash.add("Khulna");
 hash.add("Kustia");
 hash.add("Noakhali");
 hash.add("Bogra");

 System.out.println(hash);

}
}

আমি কম্পাইল করে এর আউটপুট পেয়েছিঃ

[Noakhali, Kustia, Bogra, Khulna, Dhaka]

আপনার পিসিতে অন্য আউটপুট পেতে পারেন।

এড তো করলাম, এবার রিমুভ করার জন্য clear()  মেথড ব্যবহার করতে পারি। clear()  কল করার পর পুরো হ্যাসসেট ক্লিয়ার হয়ে যাবে।

package hashsetdemo;

import java.util.HashSet;

public class HashSetDemo {

public static void main(String[] args) {

 HashSet hash = new HashSet();

 hash.add("Dhaka");
 hash.add("Khulna");
 hash.add("Kustia");
 hash.add("Noakhali");
 hash.add("Bogra");

 System.out.println("Before call clear Method: "+hash);

 hash.clear();

 System.out.println("After call clear Method: "+ hash);

}
}

উপরের প্রোগ্রামটির আউটপুট আমি পেয়েছিঃ

Before call clear Method: [Noakhali, Kustia, Bogra, Khulna, Dhaka]
After call clear Method: []

এখানে তো সব গুলো ডেটাই রিমুভ করে দিয়েছে। আমরা ইচ্ছে করলে একটি ডেটা রিমুভ করতে পারি। তার জন্য রয়েছে remove() মেথড।

যেমনঃ


package hashsetdemo;

import java.util.HashSet;

public class HashSetDemo {

public static void main(String[] args) {

 HashSet hash = new HashSet();

 hash.add("Dhaka");
 hash.add("Khulna");
 hash.add("Kustia");
 hash.add("Noakhali");
 hash.add("Bogra");

 System.out.println("Before call remove Method: "+hash);

 hash.remove("Dhaka");

 System.out.println("After call remove Method: "+ hash);

}
}

যার আউটপুটঃ

Before call remove Method: [Noakhali, Kustia, Bogra, Khulna, Dhaka]
After call remove Method: [Noakhali, Kustia, Bogra, Khulna]

HashSet এ একটি ডেটা আছে কিনা তা দেখার জন্য contains(Object o) ব্যবহার করা হয়। যদি ডেটাটি থাকে তাহলে 1 বা true রিটার্ন করবে। অথবা 0 বা false.

যেমন নিচের উদাহরনটা দেখিঃ

package hashsetdemo;

import java.util.HashSet;

public class HashSetDemo {

public static void main(String[] args) {

 HashSet hash = new HashSet();

 hash.add("Dhaka");
 hash.add("Khulna");
 hash.add("Kustia");
 hash.add("Noakhali");
 hash.add("Bogra");

 if(hash.contains("Dhaka"))
 System.out.println("Dhaka is exist in our HashSet: " + hash);

 }
}

প্রোগ্রামটির আউটপুটঃ

Dhaka is exist in our HashSet: [Noakhali, Kustia, Bogra, Khulna, Dhaka]

এখন যদি এমন একটি ভেলু  ব্যবহার করি কন্ডিশন এর মধ্যে যা HashSet  এ নেই। তাহলে কি হবে?

HashSet এ মোট কতটা ইলিম্যান্ট রয়েছে তা আমরা বের করতে পারি size() মেথডের সাহায্যেঃ

package hashsetdemo;

import java.util.HashSet;

public class HashSetDemo {

public static void main(String[] args) {

 HashSet hash = new HashSet();

 hash.add("Dhaka");
 hash.add("Khulna");
 hash.add("Kustia");
 hash.add("Noakhali");
 hash.add("Bogra");

 System.out.println("Size of our HashSet is: "+hash.size());

 }
}

উপরের HashSet এ টোটাল ৫টা ডেটা রয়েছে। সুতরাং আমাদের প্রোগ্রামের রেজাল্ট হবেঃ Size of our HashSet is: 5

আরো অনেক গুলো মেথড রয়েছে, যা এখানে পাওয়া যাবে।

Leave a Reply