日期:2014-05-20  浏览次数:20698 次

一个关于运行时间的疑惑
在做项目的时候有个需求:有一个索引的集合,要求出最小的索引,索引的格式为1.10.2.4这种,即数字.数字.数字,有多少个部分不确定。我的实现如下,最早是用findMinTableIndexe2(),后来我发现每次都要对result进行split()效率不高,我想在result发生变化的时候在去split,否则就用之前的split结果,由于我写了findMinTableIndexe1(),按我的想法,应该方法1的耗时比方法2的短,因为在方法1中省去了很多的split过程,但测试的结果发现当集合的size比较小的时候(如几百内)确实方法1耗时短,但size增长后(比如几千或更大)反而方法2的耗时更短,没有明白是什么原因,请大家帮忙看下,谢谢。
代码如下,可以通过更改main()方法中的i的大小来调整集合的size.方法的参数大家可以忽略,因为实际中我要根据参数去查找到所需要的集合,在这个测试中集合已经给出。


public class FindMinIndex {
    private static Set<String> tableIndexSet = new HashSet<String>();
//    private static Logger logger = LogManager.getLogger(FindMinIndex.class);

    public static void main(String[] args) {
        for (int i = 0; i < 10000; i++) {
            tableIndexSet.add(i + ".10.2.3");
            tableIndexSet.add(i + ".15.5.4");
            tableIndexSet.add(i + ".20.2.4");
            tableIndexSet.add(i + ".5.2.4");
            tableIndexSet.add(i + ".5.2.3");
            tableIndexSet.add(i + ".5.2.6");
        }
        //System.out.println(tableIndexSet.size());
        //tableIndexSet.clear();

        long begin = System.currentTimeMillis();
        System.out.println(findMinTableIndexe1("1"));
        long end = System.currentTimeMillis();
        System.out.println("1 use time:" + (end - begin));
        begin = System.currentTimeMillis();
        System.out.println(findMinTableIndexe2("1"));
        end = System.currentTimeMillis();
        System.out.println("2 use time:" + (end - begin));

    }

    public static String findMinTableIndexe1(final String tableOid) {
        String result = null;