1、内容:List&ArrayList, Dictionary&Hashtable, Stack, Queue;
每一点包括:增、删、查、遍历、排序、其它
关键:研究API,熟练使用
态度:代码中90%的地方用到它们,必须研究精通,熟练使用;
避免容器同时修改、查询,会出现异常;
2、List
本质:链表,在物理内存上不连续的
使用了泛型,性能更好,推荐使用;
增:Add(), AddRange()列表合并,Insert(),InsertRange()
删:Remove(),Clear(),
查:像数组一样,用下标法访问(下标范围[0, len-1]),
查找:Find()、FindAll()
是否存在:Contains()和Exists(),
元素的下标:IndexOf()
遍历:(三种方法)
方法1::for(i=0,i=len-1,i++)
方法2:var itr = alist.GetEnumerator();
while itr.MoveNext() do
itr.Current;
方法3:foreach( * in alist)
注意,不能在遍历过程中改变列表(增/删),会造成异常;
排序:Reverse(), Sort()
其它:容量:Count和Capacity,
可以与数组相互转换:new List(aArrayObj);
alit.ToArray()或alist.CopyTo();
它们都是浅拷贝,效率高;
2、ArrayList
它的类型是泛型,可放进任何类型数据;
用法上类似于List;
使用了object(会引起装箱操作),性能不足,尽量少用;
3、Dictionary
本质:“键值对”数组,底层用Hashtable实现
增:Add(),
删:Remove(), Clear(),
查:查找某键的值:下标法 或 TryGetValue()
是否存在:ContainsKey(), ContainsValue()
遍历:遍历所有键foreach (T i in dic.Keys),
遍历所有值foreach (T i in dic.Values)
遍历所有键值对foreach (KeyValuePair<int, string> pair in tt){ if (pair.Key == 2)....}
注意,不能在遍历过程中改变字典(增/删),会造成异常;
排序:无
其它:容量:Count
3、Hashtable
用法上类似于Dictionary