package com.tcgbp.test;
import static com.tcgbp.tools.ToolMethods.*;
import static com.tcgbp.Sort.ArraySort.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*;
public class Test {
/**
* @param args
* @throws NoSuchMethodException
* @throws SecurityException
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws IllegalArgumentException
* @throws InstantiationException
*/
public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException {
// testMethod(Test.class.getDeclaredMethod("randomArray",int.class),500);
//
// testMethod(Test.class.getDeclaredMethod("randomArray",int.class),10000);
//
testMethod(com.tcgbp.tools.ToolMethods.class.getDeclaredMethod("randomArray",int.class),1);
//
// testMethod(Test.class.getDeclaredMethod("randomArray",int.class),200);
for(int i=1;i<=32;i++)
testMethod(com.tcgbp.tools.ToolMethods.class.getDeclaredMethod("randomArray",int.class),i);
int al = 10000;
testMethod(com.tcgbp.Sort.ArraySort.class.getDeclaredMethod("bubbleSort",int[].class),randomArray(al));
testMethod(com.tcgbp.Sort.ArraySort.class.getDeclaredMethod("bilateralBubbleSort",int[].class),randomArray(al));
testMethod(com.tcgbp.Sort.ArraySort.class.getDeclaredMethod("selectSort",int[].class),randomArray(al));
testMethod(com.tcgbp.Sort.ArraySort.class.getDeclaredMethod("insertSort",int[].class),randomArray(al));
}
/*
* 用于测试randomArray()方法,至少吧
*/
public static void testMethod(Method m, int n) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
long s = System.nanoTime();
m.invoke(null, n);
long duration = System.nanoTime() - s;
println(m.getName() + "(" + n + ")方法運行了" + duration + "纳秒!");
}
/*
* 用于测试数组排序函数
*/
public static void testMethod(Method m, int[] n) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException{
long s = System.nanoTime();
m.invoke(null, n);
long duration = System.nanoTime() - s;
println(m.getName() + "()方法運行了" + duration + "纳秒!");
}
/*
* 泛型版的,这里没什么用 ╮(╯▽╰)╭ java的泛型
*/
public static <T> void testMethod(Method m, T n) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
long s = System.nanoTime();
T d = (T)m.invoke(null, n);
long duration = System.nanoTime() - s;
println(m.getName() + "(" + n.toString() + ")方法運行了" + duration + "纳秒!");
}
}
第一次使用java的反射机制,比我想象的要顺利,不知道能不能做成泛型方法的
我就不太明白为什么第1和第16次调用占得时间就特别多呢 第32次没有!
还有testMethod该怎么应用还没搞清楚
运行结果 写道
randomArray(1)方法運行了913803纳秒!
randomArray(1)方法運行了11454纳秒!
randomArray(2)方法運行了10895纳秒!
randomArray(3)方法運行了11174纳秒!
randomArray(4)方法運行了11733纳秒!
randomArray(5)方法運行了12012纳秒!
randomArray(6)方法運行了13689纳秒!
randomArray(7)方法運行了13130纳秒!
randomArray(8)方法運行了13410纳秒!
randomArray(9)方法運行了13689纳秒!
randomArray(10)方法運行了14248纳秒!
randomArray(11)方法運行了14806纳秒!
randomArray(12)方法運行了15086纳秒!
randomArray(13)方法運行了15645纳秒!
randomArray(14)方法運行了17600纳秒!
randomArray(15)方法運行了3375848纳秒!
randomArray(16)方法運行了71517纳秒!
randomArray(17)方法運行了16203纳秒!
randomArray(18)方法運行了16204纳秒!
randomArray(19)方法運行了16762纳秒!
randomArray(20)方法運行了17320纳秒!
randomArray(21)方法運行了18159纳秒!
randomArray(22)方法運行了18159纳秒!
randomArray(23)方法運行了18438纳秒!
randomArray(24)方法運行了18997纳秒!
randomArray(25)方法運行了19276纳秒!
randomArray(26)方法運行了19555纳秒!
randomArray(27)方法運行了23746纳秒!
randomArray(28)方法運行了21232纳秒!
randomArray(29)方法運行了21232纳秒!
randomArray(30)方法運行了22070纳秒!
randomArray(31)方法運行了22070纳秒!
randomArray(32)方法運行了22629纳秒!
bubbleSort()方法運行了560466763纳秒!
bilateralBubbleSort()方法運行了458224998纳秒!
selectSort()方法運行了336764309纳秒!
insertSort()方法運行了161829227纳秒!
分享到:
相关推荐
本文将要解释什么是回调函数、它们有什么好处、为什么要使用它们等等问题,在开始之前,假设你已经熟知了函数指针。 什么是回调函数? 简而言之,回调函数就是一个通过函数指针调用的函数。假如你把函数的...
此外,Windows API中的EnumWindow函数也是一个使用回调的例子,它遍历屏幕上的顶层窗口并为每个窗口调用用户提供的函数,这允许用户根据自己的需求处理窗口信息,而EnumWindow函数仅关注用户函数的返回值来决定是否...
在实际使用中,我们可以为已有的函数或类编写测试用例。例如,对于一个简单的加法函数`Add`,我们可以编写如下测试代码: ```cpp #include "add.h" #include TEST(Add, Positive) { EXPECT_EQ(Add(1, 2), 3); ...
CC++单元测试框架gtest初探 gtest 是 Google 开源的 C++ 单元测试框架,提供了一个灵活、可靠、可扩展的测试解决方案。本文将介绍 gtest 的基本使用,包括下载、安装、编译、建立第一个测试 Demo 工程,以及编写一...
“反射(Reflection)是.NET中的一个重要技术,通过反射,可以在运行时获得某个类型的各种信息,包括方法、属性、事件及构造函数等,还可以获得每个成员的名称、限定符和参数等信息。可以说有了反射,即可对每个类型...
### C++虚函数调用机制初探 #### 引言 C++作为一种强大的面向对象编程语言,其核心特性之一便是支持多态性(polymorphism)。多态性允许程序员使用基类类型的指针或引用调用派生类的成员函数,这种能力极大地增强了...
《PSO算法初探:基于测试函数的实现与分析》 粒子群优化(Particle Swarm Optimization,简称PSO)是一种在复杂多目标优化问题中广泛应用的全局优化算法,源自对鸟群飞行模式的模拟。该算法由Kennedy和Eberhart在...
在标题和描述中提到的"函数式编程初探共2页.pdf.zip",我们可以推测这是一个简短的介绍性文档,涵盖了函数式编程的基础知识。虽然具体的文档内容未给出,但我们可以基于函数式编程的一般概念进行详细的阐述。 1. **...
PHP 函数传递及返回值初探 本文通过总结几个小例子,初步分析了 PHP 语言中的函数参数的传递、函数返回值的确定等,给出了一些简单的结论。 一、函数参数传递 函数参数传递有三种方式:按值传递、按引用传递和...
"药材盈"电子商务软件测试初探 "药材盈"电子商务软件测试初探是对电子商务平台的测试方法和策略的研究,旨在提高电子商务平台的性能和安全性。该论文主要从三个方面对"药材盈"电子商务软件进行测试:开发部门的内部...
【Android自动化测试初探】 Android自动化测试是一种针对Android应用程序进行的自动化的质量验证过程,它旨在减少手动测试的重复劳动,提高测试效率和覆盖率。在Android系统中,自动化测试通常涉及UI测试、功能测试...
php session使用初探.pdf
学习Android有一段时间了,虽然前段时间对软件测试有了一些了解,不过接触android的单元测试却是头一次。这几天在物流大赛上也用了不少时间,所以对于android的单元测试没有太深入的研究,所以先写个基本入门吧!...
大学生使用微博原因初探.docx
C# 通过反射初探ORM框架的实现原理 在本文中,我们将探讨C# 通过反射初探ORM框架的实现原理。ORM框架是Object-Relational Mapping的缩写,主要用来实现对象和关系数据库之间的映射。在Java中,我们经常使用Mybatis...
【电动汽车整车控制器功能测试方法初探】 电动汽车作为新能源汽车的代表,其核心技术之一就是整车控制器(Vehicle Control Unit, VCU)。整车控制器负责协调和管理车辆的各个子系统,如电池管理系统、驱动电机控制...