C#的集合類繼承關系UML圖:
ICollection:所有非泛型集合的大小、枚舉器和同步方法
public interface ICollection : IEnumerable { int Count { get; } bool IsSynchronized { get; } // 對ICollection的訪問是否是同步的(線程安全) object SyncRoot { get; } // 獲取可用於對ICollection同步訪問的對象 void CopyTo(Array array, int index); }
ICollection<T>:泛型集合的屬性方法
public interface ICollection<T> : IEnumerable<T>, IEnumerable { int Count { get; } bool IsReadOnly { get; } void Add(T item); bool Remove(T item); void Clear(); bool Contains(T item); void CopyTo(T[] array, int arrayIndex); }
ArrayList: 使用大小可按需動態增加的數組實現IList接口
public class ArrayList : IList, ICollection, IEnumerable, ICloneable { public virtual int Capacity { get; set; } public virtual int Count { get; } public virtual bool IsReadOnly { get; } public virtual bool IsSynchronized { get; } public virtual object SyncRoot { get; } public virtual object this[int index] { get; set; } public ArrayList(); public ArrayList(int capacity); public ArrayList(ICollection c); public virtual IEnumerator GetEnumerator([int idx, int cnt]); // 枚舉器 public virtual object Clone(); // 創建ArrayList的淺表副本 public virtual ArrayList GetRange(int idx, int cnt); // 子集 public virtual void SetRange(int idx, ICollection c); // 設置ArrayList的值 public static ArrayList ReadOnly(ArrayList list); // 返回只讀的ArrayList包裝 public static IList ReadOnly(IList list); // 返回只讀的IList包裝 public static ArrayList Synchronized(ArrayList list); // 返回線程同步的ArrayList包裝 public static IList Synchronized(IList list); // 返回線程同步的IList包裝 public static ArrayList Adapter(IList list); // 返回IList的ArrayList包裝 public virtual int Add(object val); public virtual void AddRange(ICollection c); public virtual void Insert(int idx, object val); public virtual void InsertRange(int idx, ICollection c); public virtual void Remove(object obj); public virtual void RemoveAt(int idx); public virtual void RemoveRange(int idx, int cnt); public virtual void Clear(); public virtual bool Contains(object item); public virtual int IndexOf(object val [, int startIdx, int cnt]); public virtual int LastIndexOf(object val [, int startIdx, int cnt]); public virtual void Reverse([int idx, int cnt]); // 反轉 public virtual void Sort([IComparer cmp]); // 排序 public virtual int BinarySearch(object val [, IComparer cmp]); // 二分查找 public virtual object[] ToArray(); public virtual void CopyTo(Array array [, int arrayIdx]); }
其中,接口IList表示對象的非泛型集合,可按照索引單獨訪問
public interface IList : ICollection, IEnumerable { bool IsReadOnly { get; } object this[int index] { get; set; } // 獲取或設置指定索引處的元素 int Add(object value); void Insert(int index, object value); void Remove(object value); void RemoveAt(int index); void Clear(); bool Contains(object value); int IndexOf(object value); }
List<T>:
其中,接口IList<T>表示可按照索引單獨訪問的一組對象的集合
public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable { T this[int index] { get; set; } void Insert(int index, T item); void RemoveAt(int index); int IndexOf(T item); }
Hashtable:根據鍵的哈希代碼進行組織的鍵/值對集合
public class Hashtable : IDictionary, ICollection, IEnumerable, ISerializable, IDeserializationCallback, ICloneable { public virtual int Count { get; } public virtual bool IsReadOnly { get; } public virtual bool IsSynchronized { get; } public virtual object SyncRoot { get; } public virtual ICollection Keys { get; } public virtual ICollection Values { get; } public virtual object this[object key] { get; set; } protected IComparer comparer { get; set; } // 返回IComparer對象,用於比較 public Hashtable(); public Hashtable(int capacity); public Hashtable(IDictionary d); public virtual IDictionaryEnumerator GetEnumerator(); // 枚舉器 public virtual object Clone(); // 創建Hashtable的淺表副本 public static Hashtable Synchronized(Hashtable table); // 返回線程同步的Hashtable包裝 public virtual void Add(object key, object value); public virtual void Remove(object key); public virtual void Clear(); public virtual bool Contains(object key); public virtual bool ContainsKey(object key); public virtual bool ContainsValue(object value); protected virtual int GetHash(object key); protected virtual bool KeyEquals(object item, object key); // 與鍵比較 public virtual void CopyTo(Array array, int arrayIndex); }
其中,接口IDictionary表示鍵/值對的非泛型集合
public interface IDictionary : ICollection, IEnumerable { bool IsReadOnly { get; } object this[int index] { get; set; } ICollection Keys { get; } ICollection Values { get; } void Add(object key, object value); void Remove(object key); void Clear(); bool Contains(object key); IDictionaryEnumerator GetEnumerator(); }
其中,IDictionaryEnumerator表示非泛型字典集的枚舉器
public interface IDictionaryEnumerator : IEnumerator { DictionaryEntry Entry { get; } object Key { get; } object Value { get; } }
其中,DictionaryEntry表示字典集的元素(鍵/值對)
public struct DictionaryEntry { public DictionaryEntry(object key, object value); public object Key { get; set; } public object Value { get; set; } }
Dictionary<TKey, TValue>:鍵值對的泛型集合
public class Dictionary<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IDictionary, ICollection, IEnumerable, ISerializable, IDeserializationCallback { public int Count { get; } public Dictionary<TKey, TValue>.KeyCollection Keys { get; } public Dictionary<TKey, TValue>.ValueCollection Values { get; } public TValue this[TKey key] { get; set; } public Dictionary(); public Dictionary(int capacity); public Dictionary(IDictionary<TKey, TValue> dictionary); public Dictionary<TKey, TValue>.Enumerator GetEnumerator(); // 枚舉器 public void Add(TKey key, TValue value); public bool Remove(TKey key); public void Clear(); public bool ContainsKey(TKey key); public bool ContainsValue(TValue value); public bool TryGetValue(TKey key, out TValue value); public struct Enumerator : IEnumerator<KeyValuePair<TKey, TValue>>, IDisposable, IDictionaryEnumerator, IEnumerator {} public sealed class KeyCollection : ICollection<TKey>, IEnumerable<TKey>, ICollection, IEnumerable {} public sealed class ValueCollection : ICollection<TValue>, IEnumerable<TValue>, ICollection, IEnumerable {} }
其中,接口IDictionary<TKey, TValue>表示鍵/值對的泛型集合
public interface IDictionary<TKey, TValue> : ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable { TValue this[TKey key] { get; set; } ICollection<TKey> Keys { get; } ICollection<TValue> Values { get; } void Add(TKey key, TValue value); bool Remove(TKey key); bool ContainsKey(TKey key); bool TryGetValue(TKey key, out TValue value); }
總結: