A HashSet<T>
thực hiện ICollection<T>
giao diện:
public interface ICollection<T> : IEnumerable<T>, IEnumerable
{
// Methods
void Add(T item);
void Clear();
bool Contains(T item);
void CopyTo(T[] array, int arrayIndex);
bool Remove(T item);
// Properties
int Count { get; }
bool IsReadOnly { get; }
}
Một List<T>
dụng cụ IList<T>
, mở rộngICollection<T>
public interface IList<T> : ICollection<T>
{
// Methods
int IndexOf(T item);
void Insert(int index, T item);
void RemoveAt(int index);
// Properties
T this[int index] { get; set; }
}
Một Hashset đã thiết lập ngữ nghĩa, được triển khai thông qua hàm băm trong nội bộ:
Một tập hợp là một tập hợp không chứa 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ể.
Hashset đạt được gì, nếu nó mất chỉ số / vị trí / hành vi danh sách?
Việc thêm và truy xuất các mục từ Hashset luôn luôn bằng chính đối tượng, không thông qua bộ chỉ mục và gần với thao tác O (1) (Danh sách là O (1) thêm, truy xuất O (1) theo chỉ mục, tìm O (n) /tẩy).
Hành vi của Hashset có thể được so sánh với việc sử dụng một Dictionary<TKey,TValue>
bằng cách chỉ thêm / xóa các khóa làm giá trị và tự bỏ qua các giá trị từ điển. Bạn sẽ mong các khóa trong từ điển không có giá trị trùng lặp và đó là điểm của phần "Đặt".
SortedSet
cấu trúc dữ liệu mâu thuẫn với những gì bạn nói về thứ tự không phải là một thuộc tính của tập hợp - hoặc chỉ ra sự hiểu lầm từ nhóm phát triển.