2011-01-07 36 views
34

Câu hỏi của tôi là nhu cầu của HashSet<T> khi chúng tôi có SortedSet<T>! Tất cả các phương thức của HashSet cũng có sẵn trong SortedSet, hơn nữa SortedSet là thuận lợi vì nó cung cấp bộ sưu tập đã được sắp xếp theo cách sắp xếp! Ngay cả sau đó HashSet là hiện tại. Vậy thì nó có ích gì?SortedSet <T> vs HashSet <T>

+4

gì nếu bạn có một tập hợp những điều mà không có một cái giếng đặt hàng ở nơi đầu tiên? Làm thế nào bạn sẽ làm cho một * sắp xếp * tập hợp các điểm trong ba không gian, ví dụ? Bạn sẽ sắp xếp thứ gì? –

+1

trên Tuple.Create (x, y, z) :) – Grozz

+1

HashSet nếu bạn muốn các mục được phân loại và duy nhất? Từ MSDN> Lớp HashSet cung cấp > các hoạt động thiết lập hiệu suất cao. Tập hợp > là bộ sưu tập không chứa > các thành phần trùng lặp và có các thành phần > không theo thứ tự cụ thể. http://msdn.microsoft.com/en-us/library/bb359438.aspx – OnesimusUnbound

Trả lời

52

Nếu bạn không cần phân loại, bạn không nên sử dụng một lớp phân loại vì điều đó có nghĩa là ứng dụng của bạn sẽ làm việc nhiều hơn mức cần thiết. (Nó sẽ làm cho ứng dụng của bạn nhanh hơn, nói cách khác).

+6

Quan trọng hơn, thuật toán sẽ chạy nhanh hơn. Hashing là O (1), trong khi tập hợp được sắp xếp có khả năng sử dụng cây tìm kiếm nhị phân, là O (log n) trong trường hợp trung bình - hiệu suất kém hơn nhiều. –

+0

Trong trường hợp đó chúng ta có thể sử dụng Danh sách , phải không! Tại sao cần HashSet ?? – Batrickparry

+13

Đặt cho các mục duy nhất, Danh sách có thể chứa các mục trùng lặp. http://msdn.microsoft.com/en-us/library/bb359438.aspx cho tài liệu HashSet . Nó nói: Tập hợp là tập hợp chứa _no các phần tử trùng lặp_ và các phần tử của chúng không theo thứ tự cụ thể. – OnesimusUnbound

36

Đây là cách chọn đúng công cụ cho công việc. Phụ thuộc vào cách bạn sẽ sử dụng bộ sưu tập của mình.

This page có bảng đẹp chi tiết sự khác biệt giữa các lớp thu thập khác nhau.

Dưới đây là một đoạn trích từ bảng mà liên quan đến các bộ sưu tập bạn đang yêu cầu về:

 
Collection Ordering Contiguous Storage? Direct Access? Lookup Efficiency Manipulate Efficiency 
SortedSet Sorted   No    Via Key    Key:O(log n)   O(log n)    
HashSet  Unordered  Yes    Via Key    Key:O(1)    O(1) 
Các vấn đề liên quan