泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。泛型编程的代表作品STL是一种高效、泛型、可交互操作的 软件组件。所谓泛型(Genericity),是指具有在多种数据类型上皆可操作的含意,与模板有些相似。STL巨大,而且可以扩充,它包含很多计算机基 本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。STL以迭代器(Iterators)和 容器(Containers)为基础,是一种泛型算法(Generic Algorithms)库,容器的存在使这些算法有东西可以操作。STL包含各种泛型算法(algorithms)、泛型指针(iterators)、泛 型容器(containers)以及函数对象(function objects)。STL并非只是一些有用组件的集合,它是描述软件组件抽象需求条件的一个正规而有条理的架构。
什么是范型?
u System.Collections.Generic命名空间包含了范型集合需要的类和接口;
u 我们在写程序的时候, 经常需要这种东西: 可变长度的Array, 比如说一个string[]
而事实上定义了一个string[]并初始化后那么它的长度就固定了, Array根本做不到. 如果非要实现这种功能, 那唯一合理的办法只有定义一个ArrayList, 这个类似于vector类型的东西可以实现可变长度的Array, 但是带来几个问题:
l 1. ArrayList里面操作的都是object类型, 这意味着如果我放一个string进去, 再当作int取出来, 这在编译阶段是不会出错的, 而在运行时才会提示转换无效
l 2. 以object方式存储时, 需要装箱和拆箱操作, 这些步骤会带来额外的性能消耗 - 而没法做到普通Array那样直接
l 3. 如果要避免前两个问题, 那么所有的需要强类型的集合类都需要分别定义, 比如XxxxCollection, 非常麻烦
u 解决办法:
l Collection<string> strCollection = new Collection<string>();
strCollection.Add("a");strCollection.Add("b");.....
l 这样strCollection就是我们需要的集合. 范型使Add/Remove等操作全部都是类型安全的, 以索引器访问时也是类型安全的, 这在编译阶段(对于VS来说可以包括编写代码的阶段)就可以反映出来.
而性能方面, 这里根本就没有装箱/拆箱的操作, 所以比原有ArrayList方式性能更高. 也没有像以前那样声明一个StringCollection之类的class, 代码上也简洁的多.
u 范型的特点
l 增加了编译时的类型检查;
l 减少了装箱和拆箱操作;
l 减少了运行时的类型检查;
分享到:
相关推荐
Java 范型Java 范型
Java 范型攻略篇
JAVA范型指南:讲述范型,范型通配符,范型方法,范型与久代码(无范型)的融合,范型的擦除与翻译等...
java范型[参考].pdf
java范型[参照].pdf
java1.5范型编程指南.docjava1.5范型编程指南.docjava1.5范型编程指南.docjava1.5范型编程指南.docjava1.5范型编程指南.doc
java范型学习.............
Java范型机制 Java范型机制 Java范型机制 Java范型机制Java范型机制 Java范型机制
java 泛型类的类型识别示例 java 泛型类的类型识别示例 java 泛型类的类型识别示例
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
范型参考 (1).java
Java 实现泛型List的源码,基本实现了List接口的全部所有方法。欢迎大家发表自己的观点和建议。
Java程序设计范型和枚举PPT教案学习.pptx
范型参考 (2).java
暂时仅仅设计了以下几个功能点: 1.点对点单人聊天; 2.多人在线同时聊天; 3.用户可以自由加入和退出系统; 4.具备用户在线状态监听;
本例子说明演示了Java范型使用的动机、范型类的使用、范型方法的使用,以及范型的缺陷:类型擦除(type erasure).因为,现在Java的反射机制不能确定集合中的对象类型! 在实际应用中,如果能够灵活应用范型和反射...
java 带两个类型参数的泛型 java 带两个类型参数的泛型
11、java范型测试 12、常用JUC类:CountDownloadLatch,CylicBarrier、ReetrantLock等测试案例 13、自定义封装的并发工具类:ConcurrentAction 14、自定义限流注解和其他工具注解 15、AQS队列学习总结和测试 16、CAS...
Java基础:包括枚举、范型、引用、动态代理的方式; JNA:演示了JNA的基本用法,使用Java调用C++代码。 博客目录 Java基础 Java基础学习(1)——引用 Java基础学习(2)——注解 Java基础学习(3)——泛型 Java基础学习...
java 学习教学大纲笔记1.熟练掌握Java语言开发环境的配置 2.掌握Java语言的基本语法与编码规范 3.熟练掌握Java基本语法 4.熟练掌握数组的使用 5.掌握面向对向思想 6.掌握Java常用类 7.熟练掌握Java语言中的异常处理...