কম্পিউটার টিউটোরিয়াল

HashMap এবং ConcurrentHashMap এর পার্থক্য

জাভা কলেকশনস ডেটা ধারণ করার জন্য সবচেয়ে গুরুপূর্ণ ডেটা স্ট্রাকচার 중 하나। কলেকশনসে Map, Set, List ইত্যাদি একাধিক ইমপ্লিমেন্টেশন রয়েছে যা ডেটা স্টোরেজকে কার্যকর बनाने পাশাপাশি মাল্টি-থ্রেডিং এনভায়রনমেন্টে ডেটা হ্যান্ডলিং সক্ষম করে।

HashMap ও ConcurrentHashMap: মূল পার্থক্য

কলেকশন세의 সব ইমপ্লিমেন্টেশনের মধ্যে HashMap একটি গুরুত্বপূর্ণ কলেকশন যা কি-ভ্যালু পেয়ারে ডেটা সংরক্ষণ করে। মাল্টি-থ্রেডিং প্রেক্ষাপটে একটি আরো ইমপ্লিমেন্টেশন রয়েছে যাকে কনকারেন্ট কলেকশন বলা হয়, যা HashMap-এর গুণাবলির পাশাপাশি মাল্টি-থ্রেডিং এনভায়রনমেন্টে ডেটা হ্যান্ডলিং অনুমতি দেয়।

এই দুটি কলেকশনের ইন্টারন্যাল ইমপ্লিমেন্টেশনের ভিত্তিতে নিম্নলিখিত গুরুত্বপূর্ণ পার্থক্যগুলো রয়েছে:

ক্র. নং কী HashMap ConcurrentHashMap
১ কনকারেন্সি (Concurrency) HashMap থ্রেড-সেফ নন। একাধিক থ্রেড একসাথে অ্যাক্সেস করলে ডেটা ইনকনসিস্টেন্সি হতে পারে। ConcurrentHashMap থ্রেড-সেফ এবং মাল্টি-থ্রেডেড এনভায়রনমেন্টে ব্যবহারের উপযুক্ত।
২ ইমপ্লিমেন্টেশন HashMap-এ সেগমেন্ট (segment) কনসেপ্ট নেই; ডেটা সরাসরি কি-ভ্যালু পেয়ারে সংরক্ষিত হয়। ConcurrentHashMap ইনিশিয়ালাইজেশনের সময় ১৬টি সেগমেন্টে ভাগ হয়ে যায় (ডিফল্ট)। ১৬টি থ্রেড একটি সাথে এই সেগমেন্টগুলো অ্যাক্সেস করতে পারে, যাতে হাই কনকারেন্সিতে প্রতিটি থ্রেড নির্দিষ্ট সেগমেন্টে কাজ করে।
৩ প্রবর্তন JDK 1.2-এ HashMap চালু করা হয়। JDK 1.5-এ SUN Microsystems দ্বারা ConcurrentHashMap চালু করা হয়।
৪ নাল (Null) অনুমতি HashMap-এ কি এবং ভ্যালু উভয়কেই নাল (null) হতে পারে। ConcurrentHashMap-এ নাল কি বা নাল ভ্যালু অনুমোদিত নয়; চেষ্টা করলে NullPointerException ফেলে।
৫ সিঙ্ক্রোনাইজেশন (Synchronization) HashMap-এ সিঙ্ক্রোনাইজেশন নেই, তাই সিঙ্গল-থ্রেডেড এনভায়রনমেন্টে এটি দ্রুত। ConcurrentHashMap পুরো ম্যাপ লক না করে কনকারেন্সি লেভেল অনুযায়ী পার্টিশনে ভাগ করে শুধু নির্দিষ্ট অংশ লক করে, তাই থ্রেড-সেফটি পেয়েও পারফরম্যানস ভালো থাকে।
৬ পারফরম্যান্স Collections.synchronizedMap(HashMap) দিয়ে HashMap সিঙ্ক্রোনাইজ করা যায়, যা প্রায় Hashtable-এর সমতুল্য—এখানে প্রতিটি মডিফিকেশন অপারেশন পুরো ম্যাপ অবজেক্টে লক হয়। যদি Collections.synchronizedMap() ব্যবহার করতে হয়, তবে ConcurrentHashMap ভালো পছন্দ কারণ এটি একাধিক থ্রেডের একটি সাথে ম্যাপ অ্যাক্সেসের সুযোগ দিয়ে পারফরম্যান্স বাড়ায়।
  1. জাভায় HashTable এবং ConcurrentHashMap-এর পার্থক্য

  2. জাভায় EnumMap এবং HashMap-এর পার্থক্য

  3. Go এবং Java-এর পার্থক্য

  4. জাভাতে ConcurrentHashMap এবং Synchronized HashMap-এর পার্থক্য