জাভা কলেকশনস ডেটা ধারণ করার জন্য সবচেয়ে গুরুপূর্ণ ডেটা স্ট্রাকচার 중 하나। কলেকশনসে 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 ভালো পছন্দ কারণ এটি একাধিক থ্রেডের একটি সাথে ম্যাপ অ্যাক্সেসের সুযোগ দিয়ে পারফরম্যান্স বাড়ায়। |