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()); } } }