ArrayList
ArrayList代表了可被单独索引的对象的有序集合。但是ArrayList的默认数据类型为Object会涉及装箱和拆箱的操作
- 类似数组,但是没有固定大小,根据需要不断增大
- Add(object obj):增加元素
- Remove(object obj)/RemoveAt(index):移除元素
- Insert(index,object):在指定位置插入一个对象
- Clear():清除所有元素
- Sort():排序
哈希表
Hashtable哈希表,由一对(key,value)类型的元素组成的集合,无序存储
- 所有元素的key必须唯一,(哈希表根据key查找而不是索引,因此查找速度快)
- Add(key,value):添加对象,必须通过键-值的形式添加
- Remove(key):移除对象
- Contains(key):判断某个对象是否存在哈希表中
ArrayList和Hashtable由于存储Object类型会存在装箱和拆箱的操作,影响性能,应尽量避免使用
泛型集合List
泛型集合具有ArrayList的特性但是对数据类型进行约束,避免装箱和拆箱的操作提高性能
泛型集合的方法和ArrayList方法大致一致。
- int IndexOf(T item):获取item的索引,如果List中并未包含该项,就返回-1
- void Insert(int index,T item):将item插入到指定的索引位置上
泛型集合Dictionary<K,V>
Dictionary<K,V>数据字典,也属于泛型集合,特性类似哈希表,但是约定了数据类型,因此可以避免装箱和拆箱的操作
泛型集合-栈:Stack
栈Stack,先进后出。有序集合,不可更改
- Push(T):将元素进栈
- Pop():返回栈顶的元素并移出栈顶,(返回最后添加的元素)
- Peek():从栈顶取出一个元素,但不移出栈顶
泛型集合- 队列:Queue
队列Queue,先进先出,和栈相反
- Enqueue():进队
- Dequeue():出队
定义泛型时可以用where 来约束泛型的类型
public T ShowRoot<T>(params object[] args) where T : UIBase
{
var window = ShowRoot(typeof(T).ToString(), args) as T;
return window;
}
泛型约束
约束 | 定义 |
---|---|
struct | 类型必须是值类型 |
class | 类型必须是引用类型 |
base-class | 类型必须是基类或者继承自基类的派生类 |
interface | 类型必须是接口或者实现了接口 |
new() | 类型必须有一个公共的无参构造函数 |
特别注意:如果new()用作约束,它就必须是类型指定的最后一个约束