Computer >> Máy Tính >  >> Lập trình >> Java

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

Như chúng ta biết trong Java Collections là một trong những cấu trúc dữ liệu quan trọng nhất để lưu giữ dữ liệu. Trong bộ sưu tập, có nhiều triển khai như Bản đồ, Danh sách tập hợp, v.v. khiến nó xứng đáng nhất để lưu trữ dữ liệu và thao tác nó cho phù hợp vì những triển khai này không chỉ làm cho việc lưu trữ dữ liệu hiệu quả mà còn cho phép xử lý dữ liệu trong môi trường đa luồng.

Trong số tất cả các triển khai khác của bộ sưu tập Bản đồ băm là một trong những bộ sưu tập quan trọng lưu trữ dữ liệu trong cặp Giá trị khóa. Trong bối cảnh đa luồng, có một triển khai nữa của các tập hợp được gọi là Tập hợp đồng thời, cùng với các thuộc tính của Hash map, nó cũng cho phép xử lý dữ liệu trong môi trường đa luồng.

Trên cơ sở triển khai nội bộ của cả hai bộ sưu tập này, sau đây là những điểm khác biệt quan trọng.

Sr. Không. Phím HashMap ConcurrentHashMap
1 Đồng tiền Như đã đề cập ở trên, sự khác biệt chính giữa cả hai bộ sưu tập này là HashMap đồng thời không an toàn cho chuỗi. Mặt khác, ConcurrentHashMap là luồng an toàn và phù hợp để sử dụng trong môi trường đa luồng.
2 Triển khai Hashmap và ConcurrentHashmap được triển khai nội bộ khác nhau vì Hashmap không có khái niệm nếu các phân đoạn trong cơ chế lưu trữ của nó và lưu trữ dữ liệu trong cặp Giá trị chính. Mặt khác, triển khai Concurerent HashMap theo cách mà concurrentHashMap được chia thành nhiều đoạn [mặc định là 16] khi khởi tạo. ConcurrentHashMap cho phép số lượng (16) luồng tương tự truy cập đồng thời vào các phân đoạn này để mỗi luồng hoạt động trên một phân đoạn cụ thể trong thời gian đồng thời cao.
3 Được giới thiệu HashMap được giới thiệu trong JDK 1.2 Mặt khác, ConcurrentHashMap được SUN Microsystem giới thiệu trong JDK 1.5.
4 Cho phép rỗng Như đã đề cập ở trên, các giá trị null được cho phép đối với khóa và giá trị trong trường hợp HashMap. Mặt khác, trong Concurrent HashMap giá trị null không được phép đối với khóa cũng như giá trị và nếu được thử đối với mục nhập như vậy, hãy nhận ngoại lệ Run-time nói NullPointerException.
5 Đồng bộ hóa HashMap tốt hơn HashMap đồng thời vì không có đồng bộ hóa. Mặt khác ConcurrentHashMap, sự an toàn của chuỗi đạt được bằng cách chia toàn bộ Bản đồ thành các phân vùng khác nhau dựa trên mức Đồng thời và chỉ khóa một phần cụ thể thay vì khóa toàn bộ Bản đồ.
6 Hiệu suất Chúng tôi có thể đồng bộ hóa Hashmap bằng cách gói nó trên Collections.synchornizedMap (HashMap), sẽ trả về một tập hợp gần như tương đương với Hashtable, trong đó mọi thao tác sửa đổi trên Bản đồ đều bị khóa trên đối tượng Bản đồ. Như đã đề cập ở trên, cần phải sử dụng phương thức Collections.SynchronizedMap () thì ConcurrentHashMap () là lựa chọn tốt hơn vì ConcurrentHashMap vẫn tạo cơ hội cho nhiều luồng truy cập vào bản đồ, do đó cải thiện hiệu suất.