2010-03-16 28 views
12

Tôi đã tự hỏi liệu .Net HashSet<T> dựa hoàn toàn vào mã băm hay liệu nó có sử dụng bình đẳng không?Tính toán độc đáo .Net HashSet có hoàn toàn dựa trên Hash Codes không?

Tôi có một lớp học cụ thể mà tôi có thể có khả năng khởi tạo hàng triệu trường hợp và có cơ hội hợp lý rằng một số mã băm sẽ va chạm vào thời điểm đó.

Tôi đang xem xét sử dụng HashSet để lưu trữ một số phiên bản của lớp này và tự hỏi nếu nó thực sự đáng làm - nếu tính duy nhất của một phần tử chỉ được xác định trên mã băm của nó thì không sử dụng được với ứng dụng thực tế

Tài liệu MSDN dường như khá mơ hồ về chủ đề này - bất kỳ sự giác ngộ nào cũng sẽ được đánh giá cao

Trả lời

14

Không, nó cũng sử dụng bình đẳng. Theo định nghĩa, mã băm không cần phải là duy nhất - bất cứ điều gì mà giả định chúng sẽ bị hỏng. HashSet<T> là hợp lý. Nó sử dụng một IEqualityComparer<T> (mặc định là EqualityComparer<T>.Default) để thực hiện cả việc tạo mã băm và kiểm tra bình đẳng.

+1

Tuyệt vời - đó là chính xác những gì tôi hy vọng nó đã làm - MSDN chỉ không làm rõ điều đó trong tài liệu – RobV

Các vấn đề liên quan