`

泛型性能分析

    博客分类:
  • java
 
阅读更多
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
 
public class GenericTypeDemo {
 
	public static void main(String[] args){
		long start = System.currentTimeMillis();
		long generic_map_time = 0;
		Map<String, String> generic_map = new HashMap<String, String>();
		for(int i = 0; i < 1000000; i++){
			generic_map.put("item" + i,"value" + i);
		}
		for(int i = 0; i < generic_map.size(); i++){
			String value = generic_map.get("item" + i);
		}
		Iterator<Entry<String, String>> iter = generic_map.entrySet().iterator();
		while (iter.hasNext()) {
			 Entry<String, String> entry =  iter.next();
			 String key = entry.getKey();
			 String value = entry.getValue();
		 }
		for(int i = 0; i < generic_map.size(); i++){
			if(generic_map.containsKey("item" + i)){
				generic_map.remove("item" + i);
			}
		}
		generic_map_time = System.currentTimeMillis() - start;
 
		long map_time = 0;
		Map map = new HashMap();
		for(int i = 0; i < 1000000; i++){
			map.put("item" + i,"value" + i);
		}
		for(int i = 0; i < map.size(); i++){
			String value = map.get("item" + i).toString();
		}
		Iterator iter2 = map.entrySet().iterator();
		while (iter2.hasNext()) {
			 Entry entry =  (Entry) iter2.next();
			 String key = (String)entry.getKey();
			 String value = (String)entry.getValue();
		 }
		for(int i = 0; i < map.size(); i++){
			if(map.containsKey("item" + i)){
				map.remove("item" + i);
			}
		}
		map_time = System.currentTimeMillis() - start;
 
		System.out.println("泛型:" + generic_map_time + "非泛型:" + map_time);
	}
}

 

 

////////////////////////////////////////////

数据量(String类型) 泛型map 非泛型
1000000 1782 3516
5000000 8688 17953
100000 125 250

数据量(int类型) 泛型map 非泛型
1000000 469 953
5000000 2422 4782
100000 32 63

用泛型的性能比不用泛型而每次都要强制转换的性能好一倍,所以我们在集合类上都最好使用泛型,提高性能。泛型在集合类中使用最广泛。

分享到:
评论
1 楼 yanbo 2011-12-15  
建议采用非基本类型,非迭代器便利的方式进行测试,我采用传统的for循环便利,非基本类型,性能差距不大,泛型只是一个语法糖,不会影响虚拟机生成的二进制代码,性能本质上没有什么差距

相关推荐

    泛型编程分析.pdf

    ### 泛型编程分析 #### 引言:泛型编程的重要性 在计算机科学领域,泛型编程(Generics)作为一种重要的编程范式,为软件开发带来了显著的优势,尤其是在提高代码的可重用性和减少维护成本方面。随着C++语言的发展...

    C# 2.0中泛型编程思想分析

    2. **性能提升**:泛型消除了值类型与对象之间的装箱和拆箱操作,这可以避免不必要的内存分配和回收,从而提高程序性能。对于引用类型,由于不需要进行显式类型转换,也减少了处理器的负担。 3. **代码复用**:泛型...

    C#泛型集合与非泛型集合

    1. **性能问题**:由于非泛型集合存储的是 `object` 类型,这意味着当向集合中添加基本类型(如 `int`)时,这些类型会被装箱为引用类型。而在取出时,又需要进行拆箱操作。装箱和拆箱过程中会产生额外的内存分配和...

    泛型和泛型集合类用法

    与非泛型集合相比,泛型集合提供了更强的类型安全性,减少了运行时的装箱与拆箱操作,提高了程序性能。 #### 三、Dictionary 类详解 `Dictionary, TValue&gt;`类是.NET Framework 2.0中新引入的一个泛型集合类,它...

    Java泛型使用详细分析.docx

    因此,泛型不会影响程序的运行时性能。 总的来说,Java泛型增强了代码的类型安全性,提高了可读性和重用性,减少了类型转换的麻烦,是Java编程中不可或缺的一部分。在实际开发中,熟练掌握泛型的使用,能够使代码...

    很强大的泛型委托实例

    7. **实例分析**:压缩包中可能包含多个具体的代码示例,每个示例都展示了泛型委托在不同情境下的应用,如数据处理、算法实现等。 通过深入研究这些实例,你将能更好地理解泛型委托如何增强代码的灵活性,提高代码...

    泛型的反射分析代码可参考复杂未看懂

    对于题目中提到的"泛型的反射分析代码可参考复杂未看懂",可能是指具体的代码实现比较复杂,没有理解透彻。这可能涉及到对Java泛型和反射的深入理解,包括类型擦除、边界通配符、类型变量的实际类型等概念。如果遇到...

    C#的泛型C#的泛型

    通过上述分析可以看出,C#的泛型机制使得我们可以编写高度灵活且可重用的代码。泛型的实现依赖于CLR的支持,通过在编译阶段生成特殊的IL代码,在运行时动态实例化为具体的类型。这种机制不仅提高了代码的可维护性和...

    C++泛型编程和设计模式应用

    5. 性能优化:讨论泛型编程和设计模式如何帮助优化程序性能,减少运行时开销,提高代码效率。 6. 综合示例:提供复杂的实际项目案例,展示如何将泛型编程和设计模式结合起来解决实际问题。 通过学习这本书,读者...

    泛型集合项目练习

    泛型集合允许我们在声明集合时指定元素的数据类型,这提供了编译时的类型检查和更好的性能,因为无需在运行时进行类型转换。`Dictionary, TValue&gt;`和`List&lt;T&gt;`是.NET Framework中最常用的两种泛型集合。 **1) 使用...

    C#泛型、反射实例、自动生成sql语句

    使用泛型可以避免装箱和拆箱操作,提升性能,并确保类型安全。 **二、C# 反射** 反射是.NET Framework提供的一个强大工具,它允许运行时的代码分析、访问和修改程序集、类型、方法、属性等元数据。通过反射,我们...

    自定义泛型集合

    泛型是Java SE 5.0引入的一个特性,目的是提高代码的类型安全性,减少类转换异常,并提供更好的性能。下面我们将详细探讨自定义泛型集合的相关知识点。 首先,理解泛型的基本概念。泛型是Java中的模板类或模板方法...

    NET 2.0 泛型编程

    - **性能损失**:非泛型集合需要频繁地进行装箱和拆箱操作,这会带来额外的性能开销。 #### 类型安全 在.NET中,如C#、C++和VB.NET等语言默认都是强类型语言,即在编译阶段就会进行严格的类型检查。例如,试图将一...

    反射泛型完美版分页.rar

    这可能是通过分析SQL语句或者执行自定义的查询逻辑实现的。 3. **类型安全的转换**:利用泛型,确保在将数据库返回的结果转换为页面元素时不会出现类型错误。这通常涉及将数据库中的结果集(如ResultSet)转换为...

    泛型的使用

    在Java编程语言中,泛型是一种强大的特性,它允许开发者在定义类、接口和方法时引入类型参数,从而实现代码的复用并提高类型安全。...在实际开发中,要善于利用泛型来优化数据结构和方法,同时注意类型安全和性能优化。

    c#泛型基础讲解

    这些泛型集合类提供了比非泛型集合类更高的性能和类型安全性,因此在 .NET 2.0 及以上版本的应用程序中,强烈建议使用这些泛型集合类替代传统的非泛型集合类(如 `ArrayList`)。 #### 泛型接口、类、方法、事件和...

    大局观泛型程式设计与STL

    4. 算法的效率分析:如何选择合适的算法以优化程序性能。 5. 特殊用途的STL组件:如stack(栈)、queue(队列)和priority_queue(优先队列)。 6. 自定义容器和算法:如何利用STL提供的基础设施开发自己的数据结构...

    泛型介绍

    本文旨在深入探讨泛型的概念、实现机制及其在.NET Framework中的应用,同时分析其带来的独特优势,包括类型约束、泛型方法、委托和继承等。 #### 泛型问题陈述与解决方案 在未使用泛型的情况下,设计一个能处理...

Global site tag (gtag.js) - Google Analytics