泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。泛型编程的代表作品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的发展历程中,范型(Generics)的引入标志着语言设计上的一个重要里程碑。自Java 1.5发布以来,范型成为了Java语言的重要特性之一,极...
1. **泛型的基本概念** - **类型参数化**:泛型允许我们在定义类、接口或方法时引入类型参数,这些参数代表一种未指定的具体类型。例如,`List<T>`中的`T`就是一个类型参数,它可以在使用时被具体的类型如`Integer`...
Java泛型是Java 5版本引入的一个重要特性,极大地增强了代码的类型安全性和效率。泛型允许我们在编写类、接口和方法时指定一种或多种类型参数,使得代码能够处理多种不同类型的对象,同时在编译时进行严格的类型检查...
1. **类型安全性**:在编译时期就捕获类型错误,防止运行时的`ClassCastException`。 2. **消除类型转换**:泛型对象可以直接使用指定的类型,无需手动转换。 3. **代码重用**:泛型可以应用于不同的数据类型,提高...
1. **利用`instanceof`关键字**:我们可以在代码中使用`instanceof`来检查对象是否是某个特定类型或其子类型。例如,如果我们有一个`MyClass<?> object = new MyClass("hello");`,我们可以通过`object.myVariable ...
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
1. **类型安全性**:在编译阶段就能检测到类型错误,避免了运行时的`ClassCastException`。 2. **消除类型转换**:泛型集合可以直接存储和检索指定类型的对象,无需手动转换。 3. **代码重用**:泛型允许编写通用的...
范型参考 (1).java
Java程序设计范型和枚举是Java编程中的关键概念,它们极大地增强了代码的类型安全性和重用性。本文将深入探讨这两个主题。 首先,我们来看什么是范型(Generics)。范型是Java SE 5.0引入的一个特性,它允许在类、...
在本文中,我们将深入探讨如何使用Java的Socket编程来实现一个简单的基于P2P(Peer-to-Peer)范型的即时聊天系统。P2P网络架构允许每个节点既是客户端也是服务器,这种模式使得数据传输更加分散,提高了系统的可扩展...
Java 实现泛型List的源码,基本实现了List接口的全部所有方法。欢迎大家发表自己的观点和建议。
范型参考 (2).java
参考:我眼中的Java-Type体系(1) 我眼中的Java-Type体系(2) 秒懂Java类型(Type)系统 Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现...
Java范型是Java编程语言中的一个重要特性,它允许在类、接口和方法中使用类型参数,从而提高了代码的重用性和安全性。范型在Java中引入的主要目标是增强类型安全,减少强制类型转换,并帮助开发者编写更清晰、更易于...
本例子说明演示了Java范型使用的动机、范型类的使用、范型方法的使用,以及范型的缺陷:类型擦除(type erasure).因为,现在Java的反射机制不能确定集合中的对象类型! 在实际应用中,如果能够灵活应用范型和反射...
在Java编程语言中,泛型是一种强大的特性,它允许我们在类、接口和方法中使用类型参数,从而提高代码的灵活性和可复用性。当我们谈论“java带两个类型参数的泛型”时,这意味着我们正在处理一个泛型类或泛型方法,...
可能有源代码文件,演示了如何使用特定的编程语言(如Java、C++或JavaScript)来生成静态页面,以及如何在代码中应用范型。这些示例可以帮助学习者更好地理解和实践这两种技术。 为了进一步了解这个项目,你需要...