其实不应该说是两者的区别的,他们是一个包含的关系!
在面向对象编程中有一个术语,叫泛化,而这个泛型的来源正是来源于这里!所谓的泛型就是指的存储的是其父类型,而实现使用时声明好子类型而已。
不管是在java还是C#中,所有的类型都是基于object这个基础类型的。可以认为所有的其他类型都是object的泛型。
而泛型集合指的就是将这些泛型放在一起的集合,但在使用前必须选进类型加以加说明。
如List<T>就是一个泛型集合,可以将所有的泛合放在该集合中来。但前提时必须选声明T的类型,否则不能进行放入。这个涉及到了存储的问题,当初如果我们对于一些集合来说,比如我们可以声明这样的数组int[] a = new int[10];一旦声明,其大小不可改变,如果事选我们不知道要存入多少个,假定在存10个int,你用int[] a = new int[10];当然没有人反对,但问题是随着程序的运行我们可以要我不至10个,而这个数组却无法对其进行加长;或者你可能会说,管他呢int[] a = new int[1000];肯定够用,但那样又有诸多的内在空间在浪费!所以我们考虑到了另一个类型array这个很不错的,但是由于array在放入到必须进行打包,取出时拆包,极大的浪费了cpu的利用。
那么在.net framework2.0中添加了关于泛型的支持,也就是实现了IList接口,他既有array的特性又具有长度可以增大添小的特点,还是还是避免了打包问题,这也是在.net 2.0之后微软说,没有事后话大家都用arraylist等支持泛型的原因!
事实上由于长期的习惯,泛型我们指的就是实现IList接口的数组之类的集合类型,所以我们在称泛型或是泛型集是时,实际上是同一概念! |