当前位置: 首页 > Thinking in Java > 正文

第17章 – 深入研究容器 – Collection(List,Set,Queue)的性能测试框架(单线程中)(P501)

第17章 – 深入研究容器 – Collection(List,Set,Queue)的性能测试框架(单线程中)(P501)

 

1. Test抽象类,和测试参数类 TestParam

 

   一个Test表示一个具体的测试.

   String name; 表示这个测试的名称,比如可以测试add方法的耗时.

   Test的抽象方法test表示具体运行测试的方法,返回一个int值.

   test方法需要传入两个参数C container, TestParam tp,泛型C表示当前测试的容器,

   TestParam 类有两个参数size和loop,size表示参与测试的额容器的某种尺寸,

   而loop表示测试中循环执行的次数.

 

   TestParam方法中 提供方法public static TestParam[] array(int… values)

   将 一个一维属性转换成TestParam对象数组.

   一维数组格式[10,5000,100,500,1000,50] 表示size=10,循环5000次,

   size=100,循环500次,size=1000,循环500次

   这样执行array方法后,就返回一个TestParam[] 包含3个TestParam对象.

 

2. 测试器类Tester

 

   这个类构造时需要传入测试的容器,测试数组(Test数组) 和 测试参数数组(TestParam数组)

   Tester.timedTest() 分别按照TestParam数组中执行Test数组中每个Test的test()方法,(一个双重循环)

   并且打印每种参数(TestParam)下面各种Test的 执行test的耗时/test的返回值

 

   执行 结果类似下面这样:

   ——————– ArrayList for String ——————–

size     add     get     set iteradd  insert  remove    sort

  10     627     424     116     136    2927     201     707

 100     398     268     105     163    5369       7     152

1000     379     119     221    1119    1944       0     267

10000     437     150     157    7473   10627       0     243

 

其中 ArrayList for String 是Test的HeaderLine

size表示TestParam中的size大小.add,get等就是一Test中的name.里面是数字表示执行test的耗时/test的返回值

 

 

3. 实际使用

 

   可以创建Tester的子类

   比如ListPerformance 中就创建了子类 static class ListTester extends Tester<List<Integer>>

   表示进行List<Integer>的各种测试(这里配套的Test的数组tests也必须是针对List<Integer>的)

 

   构造函数为:

   public ListTester(List<Integer> container, List<Test<List<Integer>>> tests)

    {

      super(container, tests);

    }

    表示一个具体的List<Integer>,和List<Test<List<Integer>>> 即可.

    还提供了方法:

    public static void run(List<Integer> list, List<Test<List<Integer>>> tests)

    {

      new ListTester(list, tests).timedTest();

    }

    这样可以调用下面的方法测试

    ListTester.run(new ArrayList<Integer>(), tests);

 

    这里ListTester和相应的Test数组tests 可以测试各种元素为Integer的List,

 

    但是如果要测试中元素为String的List时,就必须重新弄一个Test的数组stests

    (static List<Test<List<String>>>        stests = new ArrayList<Test<List<String>>>();)

 

    总之运行Tester要遵循C container, List<Test<C>> tests的泛型约束.

 

    Test<C> 数组test中的C最多可以实现一类容器的通用,比如List,Queue,Set.

 

   公共代码:

 

 

 

 

3.1 各种List的测试(依赖 Thinking in Java 源代码中的net.mindview.util包中的类)

    Queue使用LinkedList实现的,也在这里面测试.

 3.2 各种Set测试

 3.3 各种Map测试

 附件是代码中依赖的工具包代码

打个赏呗

   微信打赏  支付宝打赏


本文固定链接: https://www.jack-yin.com/coding/thinking-in-java/2109.html | 边城网事

该日志由 边城网事 于2015年03月18日发表在 Thinking in Java 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 第17章 – 深入研究容器 – Collection(List,Set,Queue)的性能测试框架(单线程中)(P501) | 边城网事

第17章 – 深入研究容器 – Collection(List,Set,Queue)的性能测试框架(单线程中)(P501) 暂无评论

发表评论

快捷键:Ctrl+Enter