2012-04-16 13 views
20

Tôi sử dụng từ điển trong mã của mình nhưng đồng nghiệp của tôi sử dụng Hashtable. MSDN cho biết chúng hoạt động trên cặp Giá trị khóa & ví dụ về Hashtable và từ điển giống nhau trên MSDN.Sự khác biệt b/w Hashtable, Dictionary và KeyValuePair là gì?

Sau đó, chúng khác nhau như thế nào với nhau & là tốt nhất trong số chúng hoặc chúng phù hợp cho các dịp khác nhau?

+0

thể trùng lặp của [Tại sao điển được ưa thích hơn Hashtable trong C#?] (Http://stackoverflow.com/questions/301371/why-dictionary-is-preferred-over-hashtable-in-c) – Gabe

Trả lời

20

Hashtable là vùng chứa liên kết không được phân loại sử dụng lớp DictionaryEntry để trả lại kết quả đếm qua cặp khóa-giá trị của nó.

Dictionary<K,T> là sự thay thế chung của Hashtable đã được giới thiệu trong C# 2.0. Nó sử dụng KeyValuePair<K,T> đối tượng chung để biểu diễn cặp khóa-giá trị của nó.

Nơi duy nhất bạn sẽ thấy Hashtable những ngày này là mã kế thừa phải chạy trên .NET 1.1, trước khi các generics đã được giới thiệu. Nó được giữ xung quanh vì lý do tương thích, nhưng bạn nên thích Dictionary<K,T> bất cứ khi nào bạn có thể.

16

KeyValuePair là đơn vị dữ liệu được lưu trữ trong Hashtable (hoặc Dictionary). Chúng không tương đương với nhau.

Cặp giá trị khóa chứa một khóa duy nhất và một giá trị duy nhất. Một từ điển hoặc hashtable chứa một ánh xạ của nhiều khóa đến các giá trị liên quan của chúng.

KeyValuePair hữu ích khi bạn muốn lưu trữ hai phần thông tin liên quan dưới dạng một đơn vị, đặc biệt khi liên kết với thông tin khác theo cách xác định (ví dụ 1234 => "David Smith"). Họ cũng là những gì bạn nhận được khi bạn lặp lại một từ điển. Trong .NET 4.0, chúng thực sự chỉ có nghĩa là để sử dụng trong một từ điển - lớp Tuple đã được giới thiệu cho mục đích sử dụng chung.

Sự khác biệt giữa HashtableDictionaryHashtable không phải là lớp chung - cả khóa và giá trị đều thuộc loại Object. Dictionary là chung chung và thường được sử dụng để ủng hộ Hashtable trong bất kỳ sự phát triển mới nào.

5

Từ điển là ký tự có thể nhập được. Nếu bạn biết loại dữ liệu của khóa và giá trị, hãy sử dụng từ điển vì lý do hiệu suất (tránh truyền).

0

Một khác biệt chính là Hashtable là an toàn chỉ trong khi Dictionary thì không.

Các documentation nói:

Hashtable là chủ đề an toàn để sử dụng bởi nhiều luồng đọc và viết một sợi duy nhất. Đó là chủ đề an toàn cho việc sử dụng đa luồng khi chỉ có một trong các chủ đề thực hiện thao tác ghi (cập nhật), cho phép đọc không khóa miễn là các nhà văn được đăng theo thứ tự Hashtable. Để hỗ trợ nhiều nhà văn, tất cả các hoạt động trên Hashtable phải được thực hiện thông qua trình bao bọc được trả về theo phương thức Synchronized, miễn là không có chủ đề nào đọc đối tượng Hashtable.

Contrast này với Dictionary documentation:

Một Dictionary(Of TKey, TValue) có thể hỗ trợ nhiều độc giả đồng thời, miễn là bộ sưu tập không được sửa đổi.

+0

ISN 'Đây chỉ là một "rehash" của http://stackoverflow.com/questions/876656/difference-between-dictionary-and-hashtable ?? – sisdog