Sự khác biệt giữa HashMap và Hashtable

Khung công tác Bộ sưu tập Java cung cấp một tập hợp các lớp bộ sưu tập. Mỗi lớp có điểm mạnh và điểm yếu riêng. Một số lớp cung cấp các triển khai đầy đủ có thể được sử dụng nguyên trạng. Những cái khác là trừu tượng cung cấp các triển khai bộ xương được sử dụng làm điểm bắt đầu để tạo các bộ sưu tập. Việc triển khai bộ sưu tập sử dụng khung trình bao bọc được đồng bộ hóa để cung cấp các lớp được đồng bộ hóa, nếu không thì việc triển khai không được đồng bộ hóa. Một số lớp cung cấp việc triển khai giao diện bản đồ.

Nền tảng Java chứa ba triển khai Bản đồ có mục đích chung: HashMap, TreeMap và LinkedHashMap. HashMap và Hashtable là hai bộ sưu tập trong Java được sử dụng để lưu trữ các cặp khóa / giá trị trong bảng băm. Hashtable là một Bản đồ được đồng bộ hóa và HashMap là một Bản đồ không đồng bộ. Tuy nhiên, nếu bạn cần sử dụng Bản đồ được đồng bộ hóa, Hashtable nhanh hơn sử dụng HashMap trong trình bao bọc được đồng bộ hóa. Cả hai đều là các bộ sưu tập dựa trên hàm băm trong Java nhưng chúng có phần khác biệt. Chúng tôi nhấn mạnh một số khác biệt chính giữa hai điều này để giúp bạn hiểu rõ hơn về các điều khoản.

HashMap là gì?

HashMap là một triển khai Bản đồ dựa trên bảng băm cung cấp hiệu suất không đổi trong thời gian để chèn và định vị các cặp. Lớp HashMap cung cấp một triển khai bản đồ dựa trên cấu trúc dữ liệu Hashtable. Việc triển khai này hỗ trợ tất cả các hoạt động của Map và cho phép nhiều giá trị null nhưng chỉ có một khóa null. Nó sử dụng các cặp khóa / giá trị để lưu trữ các giá trị trong bảng băm. Đó là Bản đồ không đồng bộ, có nghĩa là nó không an toàn cho luồng và không thể chia sẻ giữa nhiều luồng mà không được đồng bộ hóa đúng cách.

Hashtable là gì?

Không giống như HashMap, Hashtable là một Bản đồ được đồng bộ hóa và nó là luồng an toàn, có nghĩa là nó có thể được chia sẻ giữa nhiều luồng. Trong Hashtable, bạn chỉ định một đối tượng có thể được sử dụng làm khóa và giá trị đi kèm với khóa. Hashtable ánh xạ các khóa thành các giá trị với sự trợ giúp của hàm băm. Java cung cấp hàm này dưới dạng phương thức hashcode () của Object, lớp này ghi đè để cung cấp mã băm thích hợp. Không giống như HashMap, Hashtable không hỗ trợ các giá trị null và các khóa null vì có kiểm tra null trong việc thực hiện phương thức put của Hashtable.

Sự khác biệt giữa HashMap và Hashtable

  1. Khái niệm cơ bản về HashMap Vs. Hashtable

Cả hai đều là các bộ sưu tập dựa trên hàm băm trong Java được sử dụng để lưu trữ dữ liệu theo cặp khóa / giá trị. HashMap là một triển khai Bản đồ dựa trên bảng băm cung cấp hiệu suất không đổi trong thời gian để chèn và định vị các cặp. Hiệu suất có thể được điều chỉnh bằng việc sử dụng các hàm tạo cho phép bạn đặt công suất và hệ số tải của bảng băm. Hashtable cơ bản khá giống với HashMap, thậm chí cả tên phương thức. Nó lưu trữ cặp khóa / giá trị trong bảng băm. Trong Hashtable, bạn chỉ định một đối tượng có thể được sử dụng làm khóa và giá trị đi kèm với khóa.

  1. Đồng bộ hóa HashMap Vs. Hashtable

Cả HashMap và Hashtable đều sử dụng các kỹ thuật băm để lưu trữ các giá trị dựa trên khóa. Giống như HashMap, Hashtable sử dụng các cặp khóa / giá trị để lưu trữ các giá trị trong bảng băm. Tuy nhiên, sự khác biệt chính giữa hai là đồng bộ hóa. HashMap là một Bản đồ không đồng bộ trong khi Hashtable là một Bản đồ được đồng bộ hóa. Điều này có nghĩa là HashMap không an toàn cho luồng và không thể chia sẻ giữa nhiều luồng mà không có mã đồng bộ hóa phù hợp. Ngược lại, Hashtable an toàn cho chuỗi và có thể được chia sẻ giữa nhiều luồng. Hashtable nhanh hơn sử dụng HashMap trong trình bao bọc được đồng bộ hóa, nếu bạn cần sử dụng Bản đồ được đồng bộ hóa.

  1. Khóa Null và Giá trị Null cho HashMap Vs. Hashtable

Lớp HashMap cung cấp một triển khai bản đồ dựa trên cấu trúc dữ liệu Hashtable. Việc triển khai này hỗ trợ tất cả các hoạt động của Map và cho phép nhiều giá trị null nhưng chỉ có một khóa null để nó có thể duy trì các thuộc tính khóa duy nhất. Tuy nhiên, nó không đảm bảo về thứ tự lưu trữ các mục. Mặt khác, Hashtable ánh xạ các khóa thành các giá trị với sự trợ giúp của hàm băm. Không giống như HashMap, Hashtable không hỗ trợ các giá trị null và các khóa null vì có kiểm tra null trong việc thực hiện phương thức put của Hashtable.

  1. Hiệu suất của HashMap Vs. Hashtable

Vì HashMap không phải là Bản đồ được đồng bộ hóa, nó nhanh hơn và tốt hơn Hashtable về hiệu suất và trên thực tế, sử dụng ít bộ nhớ hơn Hashtable. Mặc dù chúng gần như giống hệt nhau, Hashtable chậm hơn một chút so với HashMap nhưng nhanh hơn HashMap được đồng bộ hóa. Do đó, không an toàn khi sử dụng Hashtable với quyền truy cập đa luồng vì chỉ có các phương thức được đồng bộ hóa. Hashtable là bản sao được đồng bộ hóa với HashMap. Các đối tượng không đồng bộ hoạt động tốt hơn khi so sánh với các đối tượng được đồng bộ hóa giống như Hashtable hoạt động tốt hơn trong một môi trường luồng đơn.

HashMap so với Hashtable: Biểu đồ so sánh

 

Tóm tắt về HashMap Vs. Hashtable

Lớp HashMap cung cấp cho bạn một Bản đồ chưa được sắp xếp, không có thứ tự. Vì vậy, khi bạn cần một Bản đồ và bạn không quan tâm đến thứ tự các mục được lưu trữ, thì HashMap là cách để đi.

Hashtable, giống như Vector, đã có từ thời Java thời tiền sử. Giống như Vector là một đối tác được đồng bộ hóa với ArrayList hiện đại và tiên tiến hơn, Hashtable là đối tác được đồng bộ hóa với HashMap. Tuy nhiên, một lớp không thể được đồng bộ hóa, vì vậy khi chúng tôi nói rằng Hashtable là Bản đồ được đồng bộ hóa, điều đó có nghĩa là các phương thức chính của lớp được đồng bộ hóa. 

Mặc dù cả hai đều gần như giống hệt nhau, sự khác biệt nằm ở cách chúng được đồng bộ hóa và cách chúng thực hiện. HashMap hoạt động tốt hơn trong môi trường đa luồng trong khi Hashtable hoạt động tốt hơn trong môi trường luồng đơn.