Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่าง HashTable และ ConcurrentHashMap ใน Java


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