Thứ Hai, 25 tháng 2, 2013

Sự giống và khác nhau giữa HashTable và HashMap???



Cả hai đều có key và value để truy nhập đến data. HashTable là một phần có trong lớp Collection của Java, còn HashMap là một phần của Framework Collection mới có trong Java2, v 1.2.

Sự khác nhau giữa 2 cái là việc truy nhập đến HashTable là đồng bộ(Synchronized) trong khi với HashMap thì không. Synchronized(bạn học về Java Thread sẽ hiểu rõ cái này) ở đây có nghĩa là chỉ có một luồng có thể modify một HashTable tại một điểm trong cùng một thời gian. Nếu có một luồng khác nào muốn update trên HashTable đó thì nó phải chiếm được quyền kiểm soát trên đối tượng trong khi các luồng kia sẽ phải đợi để nhả khóa. HashTable là luồng an toàn(thread safe) bởi khi có nhiều luồng truy nhập đến một HashTable thì chỉ có một luồng thực thi update sau khi đã khóa để giữ toàn vẹn dữ liệu. HashMap thì không an toàn khi có nhiều luồng truy nhập vào HashMap và một trong các luồng đó cố update dữ liệu và sau đó nó sẽ tung ra một ngoại lệ(Exception). Chúng ta sử dụng HashMap nếu bạn chắc chắn rằng HashMap sẽ không bị truy nhập bởi nhiều luồng. Tuy HashMap không phải là luồng an toàn nhưng chính vì thế nó sẽ thực thi nhanh hơn so với HashTable.

Một sự khác nhau nữa là iterator trong HashMap là có sự đảm bảo an toàn (fail-safe) còn enumerator trong HashTable thì không vì nó đã là thread safe. Iterator và enumerator cơ bản là giống nhau dung để duyệt các cấu trúc dữ liệu (trong Collection). Sự đảm bảo an toàn ở đây có nghĩa là nếu bạn lấy ra danh sách các Item trong HashMap , sau đó trong khi bạn đọc danh sách item mà dữ liệu trong HashMap thay đổi thì nó sẽ tung ra một Exception.

Và sự khác biệt thứ ba chính là HashMap cho phép có value là null còn HashTable thì không.

Chính vì các lý do trên, bây giờ các lập trình viên thường sử dụng HashMap.

Không có nhận xét nào:

Đăng nhận xét