为什么要使用泛型?泛型和非泛型对比

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 泛型和非泛型对比
{
    class Program
    {
        static void Main(string[] args)
        {
            testGeneric();
            testNonGeneric();
            Console.ReadKey();
        }
        //测试泛型类型操作的运行时间
        public static void testGeneric()
        {
            Stopwatch stopwatch = new Stopwatch();
            List<int> list = new List<int>();
            stopwatch.Start();
            for (int i = 0; i < 10000000; i++)
            {
                list.Add(i);
            }
            stopwatch.Stop();
            TimeSpan ts = stopwatch.Elapsed;
            string elapsedTime = string.Format("{0:00}:{1:00}:{2:00}:{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.TotalMilliseconds / 10);
            Console.WriteLine("泛型类型运行的时间:" + elapsedTime);
        }
        public static void testNonGeneric()
        {
            Stopwatch stopwatch = new Stopwatch();
            ArrayList arraylist = new ArrayList();
            stopwatch.Start();
            for (int i = 0; i < 10000000; i++)
            {
                arraylist.Add(i);
            }
            stopwatch.Stop();
            TimeSpan ts = stopwatch.Elapsed;
            string elapsetime = string.Format("{0:00}:{1:00}:{2:00}:{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
            Console.WriteLine("非泛型运行的时间:" + elapsetime);

        }
    }
}

运行效果图:

时间: 2024-10-06 07:47:05

为什么要使用泛型?泛型和非泛型对比的相关文章

C#泛型集合与非泛型集合_Felix(转自新浪博客)

在.NET FCL为我们提供了很多集合类型,是编程中非常有力的工具.泛型集合主要在System.Collections.Generic名称空间中,而非泛型集合主要在System.Collections,首先抛出结论:如果在C#2.0版本以上,尽量使用泛型集合类,而不使用非泛型集合类.因为,1.泛型编程是从c#2.0开始才被.net支持的.2.泛型集合在性能和类型安全方面优于非泛型集合. 非泛型集合-System.Collections名字空间中的类主要包括ArrayList, Hashtable

编写高质量代码改善C#程序的157个建议——建议20:使用泛型集合代替非泛型集合

建议20:使用泛型集合代替非泛型集合 在建议1中我们知道,如果要让代码高效运行,应该尽量避免装箱和拆箱,以及尽量减少转型.很遗憾,在微软提供给我们的第一代集合类型中没有做到这一点,下面我们看ArrayList这个类的使用情况: ArrayList al=new ArrayList(); al.Add(0); al.Add(1); al.Add("mike"); foreach (var item in al) { Console.WriteLine(item); } 上面这段代码充分演

泛型集合和非泛型集合的区别

他们俩个,一个是弱类型,一个是强类型. 而弱类型是指无法在应用程序编译期间得到检查,如array对象,你可以往这个对象中添加数字和字符都没有问题.但是在遍历操作的时候可能会牵扯到数据类型的转换,在不同类型转换的时候可能会出现类型转换是的异常. 而强类型则在编译期间进行检查,如list<string>标明我们只能够在集合中存储string字符串类型,一旦添加其他类型的数据就会在编译期间出现错的提示.

类型安全---泛型与非泛型

============================================================非泛型 -------------------------LinkedListNode.cs类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplicati

.NET泛型与非泛型的问题

泛型集合通常情况下,建议您使用泛型集合,因为这样可以获得类型安全的直接优点而不需要从基集合类型派生并实现类型特定的成员.下面的泛型类型对应于现有的集合类型:1.List 是对应于 ArrayList 的泛型类.2.Dictionary 是对应于 Hashtable 的泛型类.3.Collection 是对应于 CollectionBase 的泛型类.4.ReadOnlyCollection 是对应于 ReadOnlyCollectionBase 的泛型类.5.Queue.Stack 和 Sort

高效代码指泛型代替非泛型

用泛型代替非泛型,提高效率. 今天测试了一下使用泛型和非泛型的效率问题,结果一目了然. 例子代码如下: public class Test { static int collectionCount = 0; static Stopwatch watch = null; static int testCount = 1000000; public static void TestBegin() { GC.Collect();////强制对所有代码进行垃圾回收 GC.WaitForPendingFi

LINQ学习系列-----3.1 查询非泛型集合

一.问题起源 LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典.数组.List<T>等,但是对于继承了IEnumerable的非泛型集合如何处理,例如ArrayList. 二.解决办法 上源码: ArrayList mArrayList = new ArrayList() {"222","1dsadsad","12w1212","1212e12esadq&

编写高质量代码改善C#程序的157个建议[优先考虑泛型、避免在泛型中声明静态成员、为泛型参数设定约束]

前言 泛型并不是C#语言一开始就带有的特性,而是在FCL2.0之后实现的新功能.基于泛型,我们得以将类型参数化,以便更大范围地进行代码复用.同时,它减少了泛型类及泛型方法中的转型,确保了类型安全.委托本身是一种引用类型,它保存的也是托管堆中对象的引用,只不过这个引用比较特殊,它是对方法的引用.事件本身也是委托,它是委托组,C#中提供了关键字event来对事件进行特别区分.一旦我们开始编写稍微复杂的C#代码,就肯定离不开泛型.委托和事件.本章将针对这三个方面进行说明. 这里也有一篇之前我对泛型的简

Java泛型和集合之泛型介绍

在声明一个接口和类的时候可以使用尖括号带有一个或者多个参数但是当你在声明属于一个接口或者类的变量的时候或者你在创建一个类实例的时候需要提供他们的具体类型.我们来看下下面这个例子 List<String>words = new ArrayList<String>(); words.add("Hello "); words.add("world!"); String s = words.get(0)+words.get(1); assert s.