ConcurrentHashMap হলো JDK 1.5-এ চালু একটি ক্লাস। ConcurrentHashMap শুধু বাকেট লেভেলে লক প্রয়োগ করে যাকে ফ্র্যাগমেন্ট বলা হয়, ম্যাপে এলিমেন্ট যোগ বা আপডেট করার সময়। তাই ConcurrentHashMap ম্যাপে কনকারেন্ট রিড ও রাইট অপারেশন অনুমতি দেয়।
HashTable হলো একটি থ্রেড-সেফ লিগেসি ক্লাস যা JDK 1.1-এ চালু করা হয়েছিল। এটি Map ইন্টারফেসের বেস ইমপ্লিমেন্টেশন। এটি নাল কি ও ভ্যালু অনুমতি দেয় না। এটি সিনক্রোনাইজড স্বভাবের তাই দুটি আলাদা থ্রেড সিমালটেনিয়াসলি এক্সেস করতে পারে না। Hashtable কোনো অর্ডার মেইন্টেইন করে না।
| Sr. No. | Key | HashTable | ConcurrentHashMap |
|---|---|---|---|
1 |
Basic |
HashTable হলো JDK 1.1-এ চালু একটি থ্রেড-সেফ লিগেসি ক্লাস | ConcurrentHashMap হলো JDK 1.5-এ চালু একটি ক্লাস |
2 |
Locking |
পুরো কালেকশনে লক প্রয়োগ করে |
ConcurrentHashMap শুধু বাকেট লেভেলে (ফ্র্যাগমেন্ট) লক প্রয়োগ করে যোগ বা আপডেট করার সময় |
3 |
Performance |
ConcurrentHashMap-র চেয়ে ধীর | HashTable-র চেয়ে ভাল পারফরম্যান্স |
4 |
Null |
নাল কি ও ভ্যালু অনুমতি দেয় না |
নাল কি ও ভ্যালু অনুমতি দেয় |
Hashtable উদাহরণ
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
public class HashtableExample {
public static void main(String[] args) {
// create Hashtable
Hashtable map = new Hashtable();
map.put("HCL", "100");
map.put("DELL", "200");
map.put("IBM", "300");
// print the map
for (Map.Entry m : map.entrySet()) {
System.out.println(m.getKey() + " " + m.getValue());
}
}
}
ConcurrentHashMap উদাহরণ
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class ConcurrentHashMapExample {
public static void main(String[] args) {
// ConcurrentHashMap
Map myMap = new ConcurrentHashMap();
myMap.put("HCL", "1");
myMap.put("DELL", "1");
// print the map
for (Map.Entry m : map.entrySet()) {
System.out.println(m.getKey() + " " + m.getValue());
}
}
}