2.1. List
IDisposable
void Dispose();
IEnumerator:IDisposable
bool MoveNext();
void Reset();
object Current{get;}
IEnumerator:IEumerator
new Current{get;}
IEnumerable
IEnumerator GetEnumerator();
IEumerable:IEumerable
new IEumerator<T> GetEnumerator();
ICollection:IEumerable
void CopyTo(Array array,int index);
int Count{get;}
Object SyncRoot{get;}
bool IsSynchronized{get;}
ICollection:IEumerable
// base intreface for all collections,defining enumerator,size,and synchronization methods
int Count{get;}
bool IsReadOnly{get}
void Add(T item);
void Clear();
bool Contains(T item);
// copyto copies a collection into an array,starting at a paricular index into the array
void CopyTo(T[] array,int arrayIndex);
bool Remove(T item);
IList:ICollection
Object this[int index]{get;set;}
int Add(Object value);
bool Contains(Object value);
void Clear();
bool IsReadOnly{get;}
bool IsFixedSize{get;}
int IndexOf(Object value);
void Insert(int index,Object vlaue);
void Remove(Object value);
void RemoveAt(int index);
IList:IColleciton
//提供索引访问
T this[int index]{get;set;}
int IndexOf(T item);
//inserts value into the list at postion index
void Insert(int index,T item);
void RemoveAt(int index);
IReadOnlyCollection:IEnumerable
int Count{get;}
IReadOnlyList
T this[int index]{get;}
IComparer 对象实现比较查询的是否非常重要的一个接口
int Compare(T x,T y);
IEqualityComparer
bool Equals(Object x,Object y);
int GetHashCode(Object obj);
IEqualityComparer
bool Equals(T x,T y);
int GetHashCode(T obj);
List:IList,IList,IReadOnlyList
1400行,中等复杂
private T[] _items;
private int _size,_version,_syncRoot; //Capacity内部数组_items[]的当前分配的长度
private static readonly T[] _emptyArray=new T[0];
public int Count{get{return _size;}} //_size和Count是_items[]实际存储的元素个数,并不是分配的个数
pubilc int Capacity{get;set;} //不要手动设置Capacity>0,每次修改都会引发旧数组复制到新数组,重新分配新的内存长度,建立新的数组并赋值给items。设置<=0将清空_items
private bool IsSynchronize{get{return false;}} //非线程安全
Add(T item){}; //1. 检查capacity 2.size的话自增,size可以从0自增(没有数据),或者用ICollection初始化就从那个基础上增加
BinarySearch(T item){} //O(lgn)
InsertRange(int index,IEumerable<T> collection){} //它最奇怪的是不用简单的迭代器,而选择使用ICollection.CopyTo(),应该是CopyTo的效率比迭代器好
Contians(T item);// 这里有个细节是它没有使用==来判断非空对象而是调用了Equals(),这样写应该好处更多,只在null的时候才被迫使用==进行判断
CopyTo(); //内部使用Array.Copy 将内置的_items拷贝到array参数中
Find()/FindAll(){}; //只是使用了for循环而已,逐条判断
FindIndex(){}; //循环
FindLast(){}; //倒过来循环
ForEach(Action<T> action){}; //判断如果是.net4.5以上使用for循环执行action,不是并发,就是一种foreach的封装,估计是历史遗留代码,很鸡肋
GetRange(int index,int count){}; //使用不是逐条insert这种垃圾写法,用的是Array.Copy() newlist._items ,也只有类内部可以这样调用,外部的话可以用CopyTo
RemoveAt(int index){}; //原数组复制,去掉中间的那个数据,Array.Copy(_items,index+1,_items,index,_size-index);并且把最后一位设置成default(T)
这就是