C# 集合 泛型

136 阅读2分钟

集合

  • 集合中的项允许是 object 型的值,因此可以存放任意类型的值。
ArrayList类:动态数组
  • ArrayList中存储的类型都是object类型
Queue类:队列
  • 先进先出 |属性或方法|作用| | ------------------------ | ------------------------- | |object Dequeue() | 移除并返回位于 Queue 实例开始处的对象 | | void Enqueue(object obj) | 将对象添加到 Queue 实例的结尾处 | | object Peek()  | 返回位于 Queue 实例开始处的对象但不将其移除|
Stack类:堆栈
  • 先进后出 |属性或方法|作用| | ------------------------ | ------------------------- | |object Peek() | 用于获取栈顶元素的值,但不移除栈顶元素的值 | | object Pop() | 用于移除栈顶元素的值,并移除栈顶元素 | | Clear() | 从 Stack 中移除所有的元素|
Hashtable类:哈希表(散列表)
  • Hashtable 类实现了 IDictionary 接口,集合中的值都是以键值对的形式存取的。
  • 在 Hashtable 中存放了两个数组,一个数组用于存放 key 值,一个数组用于存放 value 值。
  • 还提供了根据集合中元素的 key 值查找其对应的 value 值的方法。 |属性或方法|作用| | ------------------------ | ------------------------- | |void Add(object key,object value) | 向集合中添加元素 | | void Remove(object key) | 根据指定的 key 值移除对应的集合元素|
SortedList类:有序列表
  • SortedList 称为有序列表,按照 key 值对集合中的元素排序。

泛型

泛型允许编写一个可以与任何数据类型一起工作的类或方法。

泛型约束

T:类 (类型参数必须是引用类型,包括任何类、接口、委托或数组类型) T:new (类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时new()约束必须最后指定) T: <基类名> 类型参数必须是指定的基类或派生自指定的基类 T: <接口名> 类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型

    public class class_name<T> where T:new(){}
    public class class_name<T> where T:base_class_name{}
泛型方法
class Program
{
    static void Main(string[] args)
    {
        //将T设置为double类型
        Add<double>(3.3, 4);
        //将T设置为int类型
        Add<int>(3, 4);
    }
    //加法运算
    private static void Add<T>(T a, T b)
    {
        double sum = double.Parse(a.ToString()) + double.Parse(b.ToString());
        Console.WriteLine(sum);
    }
}

//如果在调用 Add 方法时,没有按照 <T> 中规定的类型传递参数,则会出现编译错误
泛型类
class MyTest<T>
{
    private T[] items = new T[3];
}

//
MyTest<int> test = new MyTest<int>();
泛型集合
// 非泛型集合中的 ArrayList、Hashtable 
//型集合中分别使用 List<T> 和 Dictionary<K,V> 来表示,
//泛型集合均与非泛型集合一致。

List<Student> list = new List<Student>();

Dictionary<int, Student> dictionary = new Dictionary<int, Student>();
IComparable、IComparer接口:比较两个对象的值

c.biancheng.net/view/2911.h…