zoukankan      html  css  js  c++  java
  • 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)
    这就是
  • 相关阅读:
    学习ReentrantLock
    新博客地址:WWW.BG7YWL.COM
    LimeSDR 无线信号重放攻击和逆向分析
    LimeSDR 上手指南
    GSM:嗅探语音流量
    制作一个老旧C118的GSM便携式测试设备
    SMS PDU编码数据串格式分析
    闪付卡(QuickPass)隐私泄露原理
    低成本制作基于OpenWRT的渗透工具
    Inside a low budget consumer hardware espionage implant
  • 原文地址:https://www.cnblogs.com/zhangrCsharp/p/7695541.html
Copyright © 2011-2022 走看看