`

泛型的效率和原始类的效率比较(转)

    博客分类:
  • java
阅读更多

 用 了好久的泛型,突然听到有人说:泛型影响效率! 嘿,我这暴脾气! google 了一下,果然有很多人出来测试.最有气的是CSDN 上一个 楞种儿 测试出来 的结果 是:泛型比原始多一倍的时间.我一看测试代码,我就日.2个方法一起执行.后执行的运行时间肯定比先执行的快,应该是缓存的原因吧. 我改了改,弄了一个比较公平的 代码测试.结果我感觉好似 泛型在效率上稍微占点优势.另外看到一位大侠,用汇编语言测试,结果也差不多. 好了,让我们安心的用泛型吧!

 

import java.util.ArrayList;

public class Test {

 static long time = 0; //每次消耗时间
 static long total=0; //总时间
 static float average; //时间平均值

 public static void main(String[] args) {
  for (int i = 0; i < 10; i++) {
   Generic();//泛型
  }
//  for (int i = 0; i < 10; i++) {
//   NonGeneric();//原始类型
//  }
  System.out.println("10次总时间:   " + total + "   ms");//10次消耗时间
  System.out.println("10次平均值:   " + average + "   ms");
 }

 //原始类型
 public static void NonGeneric() {
  long start = System.currentTimeMillis();//开始时间
  ArrayList no_list=new ArrayList();
  for (int i = 0; i < 1000000; i++) {
   no_list.add(new Integer(i)); //添加
  }
  for (int i = 0; i < 1000000; i++) {
   int j = ((Integer) no_list.get(i)).intValue();//取值
  }
  long end = System.currentTimeMillis();//结束时间
  time =(end - start);
  total +=time;
  average = total/10f;
  System.out.println("NonGeneric:   " + time + "   ms");//每次输出消耗时间
 }

 //泛型
 public static void Generic() {
  long start = System.currentTimeMillis();//开始时间
  ArrayList<Integer> list = new ArrayList<Integer>();
  for (int k = 0; k < 1000000; k++) {
   list.add(new Integer(k));//添加
  }
  for (int n = 0; n < 1000000; n++) {
   int m = list.get(n).intValue();//取值
  }
  long end = System.currentTimeMillis();//结束时间.
  time =(end - start);
  total +=time;
  average = total/10f;
  System.out.println("Generic:   " + time + "   ms");//每次输出消耗时间
 }

}

 

 运行环境 硬件:cpu:AMD3k+ ; ram:金士顿ddr1 512*2 ; harddisk:希捷160g 7200转 8m 串

          软件:os: xp ; myeclipse 6.5 ; jdk 1.6

比较如下:

Generic:   375   ms
Generic:   281   ms
Generic:   297   ms
Generic:   235   ms
Generic:   203   ms
Generic:   312   ms
Generic:   219   ms
Generic:   203   ms
Generic:   312   ms
Generic:   219   ms
10次总时间:   2656   ms
10次平均值:   265.6   ms
NonGeneric:   375   ms
NonGeneric:   281   ms
NonGeneric:   297   ms
NonGeneric:   219   ms
NonGeneric:   219   ms
NonGeneric:   312   ms
NonGeneric:   219   ms
NonGeneric:   219   ms
NonGeneric:   312   ms
NonGeneric:   219   ms
10次总时间:   2672   ms
10次平均值:   267.2   ms
分享到:
评论
2 楼 hejiangtao 2012-01-15  
这里只是效率上差不多 但是有些非用泛型的场景 用了没有关系.
1 楼 osacar 2012-01-15  
也就是说泛型也没占多少优势?
可是每次不用泛型就看到eclipse里那黄黄的叹号让我很不舒服!

相关推荐

    泛型&lt;编程>:类型化缓存(I)

    第二,我们要讨论的缓存的效率和存放在里面的类型及所在操作系统容许的最高效率相当,这种效率是指在任何方面的效率——包括分配策略,和数据操作。 你会很快看到,写一个泛型缓存是个关于模板的小小练习。写一个...

    泛型&lt;编程>:类型化缓存(III)

    本篇你要读到的文章有一个更广的视角——我们要讨论拷贝和移动对象,而不是原始数据。低能的分配器(Allocator) 当我在聚会中想要用讨论基于策略的设计[2]来让人们大吃一惊时,我经常嘲笑STL分配器是个有名的关于...

    数据结构实验报告 线性表.doc

    要求:①掌握线性表的顺序存储结构和链式存储结构实现,体会两者特点,分析算法效率;②掌握在MyEclipse等集成开发环境中程序的运行和调试技术。 二、实验题目 2-1 ①比较this与obj引用的单链表是否相等,算法不能...

    Swift语言开发常见问题总结.docx

    这些技巧可以帮助开发者提高编码效率、写出更简洁、更安全的Swift代码: 函数式编程 柯里化(Currying):将一个多参数函数转换成一系列单参数函数链。 使用map、filter、reduce等高阶函数处理集合。 枚举强化 ...

    Guava 16.0 API (CHM格式)

     com.google.common.collect:带泛型的集合接口扩展和实现,以及工具类,这里你会发现很多好玩的集合。  com.google.common.eventbus:发布订阅风格的事件总线。  com.google.common.hash: 哈希工具包。  ...

    c#源码转java源码的-klib:一个独立的轻量级C库

    c#原始码转Java原始码的Klib:C语言中的泛型库 概述 Klib是一个独立的轻量级C库,在.NET下分发。 除标准C库外,大多数组件都独立于外部库,并且彼此独立。 要使用此库的组件,只需要将几个文件复制到源代码树中,而...

    Winson.Framework 1.0发布!

    &lt;br&gt;1、利用泛型和集合,结合数据库实体进行操作以提高效率和封装性 2、动态生成所需的SQL增、删、改、查等语句对实体进行操作 3、上层操作可以不需要写SQL语句 4、实体赋值方便,只需设置需要更新的...

    摩托罗拉C++面试题

    总的来说:引用既具有指针的效率,又具有变量使用的方便性和直观性. 5.参数传递有几种方式;实现多态参数传递采用什么方式,如果没有使用某种方式原因是什么; 传值,传指针或者引用 6.结合一个项目说明你怎样...

    the-annotated-stl-sources-notes

    孟岩:STL是精致的软件框架,是为优化效率而无所不用的其极的艺术品,是数据结构与算法大师经年累月的智能结晶,是泛型思想的光辉诗篇,是C ++高级技术的精彩亮相!执照版权所有:copyright:2021 Zhang Jingtang。 ...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    ASP.Net的快速开发是ASP.Net非常大的一个优点,可以加快开发效率,这是行业的发展趋势,但是局限于这样的“傻瓜化开发方式”的开发人员的竞争力和成长性都是非常有限的,遇到ASP.Net一些高级技术(比如ASP.Net MVC、...

Global site tag (gtag.js) - Google Analytics