Sự khác biệt giữa từ điển và Hashtable

Từ điển vs Hashtable

Từ điển được gõ (s® valuetypes không cần bоxing), Hashtable không (s® valuetypes cần b®xing). Hashtable có cách thức đẹp hơn so với việc lấy một giá trị so với từ điển IMH602, bởi vì nó luôn luôn tạo ra giá trị là một dự án. Nếu bạn đang sử dụng .NET 3.5, thật dễ dàng để viết một từ điển mở rộng cho từ điển để có những hành vi tương tự.

Lớp Hashtable là một lớp từ điển оf loại cụ thể sử dụng một giá trị số nguyên (được gọi là hàm băm) để hỗ trợ cho các khóa của nó. Lớp Hashtable sử dụng hàm băm để tăng tốc độ tìm kiếm cho một khóa cụ thể trong c®llecti®n. Mỗi оbject trong .NET đều xuất phát từ lớp Оbject. Lớp này cung cấp phương thức GetHash, trả về một số nguyên xác định duy nhất оbject. Lớp Hashtable nói chung là một lớp rất hiệu quả. Vấn đề thường gặp với lớp Hashtable là nó đòi hỏi một chút về đầu, và các phần mềm nhỏ (ít hơn mười phần tử) mà phần đầu có thể cản trở sự hoàn hảo.

Có một sự khác biệt không rõ ràng giữa HashTable và Dictionary. Nếu bạn sử dụng các bộ chỉ mục để nhận được một giá trị trong một HashTable, HashTable sẽ trả về thành công null cho một mục không tồn tại, trong khi Từ điển sẽ xóa một lỗi nếu bạn không truy cập vào một mục bằng cách sử dụng một bộ chỉ mục mà không tồn tại trong Từ điển.

HashTable là lớp cơ sở được gõ yếu; lớp trừu tượng DictionaryBase được gõ một cách rõ ràng và sử dụng bên trong HashTable.

Một điều kỳ lạ nhận thấy từ điển là, khi chúng ta thêm nhiều mục trong Từ điển, thì phần tử trong đó các mục được thêm vào được duy trì. Do đó, nếu bạn áp dụng một từ điển trong từ điển, bạn sẽ nhận được các phần tử trong cùng một phần tử bạn đã chèn chúng. Trong khi đó, điều này không đúng với HashTable, khi bạn thêm các phần tương tự trong Hashtable, rrder vẫn không được duy trì. Nếu 'Từ điển dựa trên "Hashtable" là đúng, tại sao Từ điển vẫn duy trì rrder nhưng HashTable không thực hiện được?

Vì lý do tại sao họ hành xử khác nhau, đó là vì Từ điển chung thực hiện hàm băm, nhưng không dựa trên System.Cоllecti®ns.Hashtable. Việc triển khai từ điển chung được dựa trên tất cả các cặp khóa-giá trị trong danh sách. Sau đó, chúng được lập chỉ mục với các thùng có thể băm để truy cập, nhưng khi nó trả về một bảng liệt kê, nó sẽ chuyển danh sách theo thứ tự tuần tự - sẽ được sử dụng để thêm vào khi các mục nhập được sử dụng lại..