Concurrent Hashmap เป็นคลาสที่เปิดตัวใน jdk1.5 แม็พแฮชที่เกิดขึ้นพร้อมกันจะใช้การล็อกที่ระดับบัคเก็ตเท่านั้นที่เรียกว่าแฟรกเมนต์ ขณะเพิ่มหรืออัปเดตแผนที่ ดังนั้น แฮชแม็พพร้อมกันจึงอนุญาตให้ดำเนินการอ่านและเขียนพร้อมกันไปยังแผนที่ได้
HashTable เป็นคลาสดั้งเดิมที่ปลอดภัยสำหรับเธรดที่เปิดตัวใน Jdk1.1 เป็นการใช้งานพื้นฐานของอินเทอร์เฟซแผนที่ ไม่อนุญาตให้มีคีย์และค่าว่าง มีการซิงโครไนซ์ในลักษณะดังนั้นสองเธรดที่แตกต่างกันไม่สามารถเข้าถึงได้พร้อมกัน Hashtable ไม่ได้รักษาลำดับใด ๆ
| ซีเนียร์ เลขที่ | คีย์ | HashTable | ConcurrentHashMap |
|---|---|---|---|
| 1 | พื้นฐาน | HashTable เป็นคลาสดั้งเดิมที่ปลอดภัยสำหรับเธรดที่เปิดตัวใน Jdk1.1 | ConcurrentHashmap เป็นคลาสที่เปิดตัวใน jdk1.5 |
| 2 | กำลังล็อค | มันใช้ล็อคกับคอลเลกชันทั้งหมด | ConcurrentHashMap ใช้การล็อกเฉพาะที่ระดับบัคเก็ตที่เรียกว่าแฟรกเมนต์ขณะเพิ่มหรืออัปเดตแผนที่ |
| 3 | ประสิทธิภาพ | ช้ากว่า ConcurrentHashMap | ดีกว่า HashTable |
| 4. | ว่าง | ไม่อนุญาตให้มีคีย์และค่า null | อนุญาตให้คีย์ 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());
}
}
}